数据分析与应用-----使用scikit-learn构建模型
目录
一、使用sklearn转换器处理数据
(一)、加载datasets模块中的数据集
(二)、将数据集划分为训练集和测试集
编辑 train_test_spli
(三)、使用sklearn转换器进行数据预处理与降维
PCA
二、 构建并评价聚类模型
(一)、使用sklearn估计器构建聚类模型
(二)、使用sklearn转换器进行数据预处理与降维
TSNE类
(三)、评价聚类模型
一、使用sklearn转换器处理数据
(一)、加载datasets模块中的数据集
sklearn库的datasets模块集成了部分数据分析的经典数据集,读者可以使用这些数据集进行数据预处理、建 模等操作,以及熟悉sklearn的数据处理流程和建模流程。
datasets模块常用数据集的加载函数及其解释,如下表所示。
使用sklearn进行数据预处理需要用到sklearn提供的统一接口——转换器(Transformer)。
如果需要加载某个数据集,那么可以将对应的函数赋值给某个变量。加载diabetes数据集,如以下代码
(二)、将数据集划分为训练集和测试集
train_test_spli
在sklearn的model_selection模块中提供了train_test_split函数,可实现对数据集进行拆分,train_test_split函数 的基本使用格式如下。
sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
train_test_split函数是最常用的数据划分方法,在model_selection模块中还提供了其他数据集划分的函数,如PredefinedSplit函数、ShuffleSplit函数等。读者可以通过查看官方文档学习其使用方法。
数值型数据类型 | 说明 |
*arrays | 接收list、numpy数组、scipy-sparse矩阵、Pandas数据帧。表示需要划分的数据集。若为分类回归,则分别传入数据和标签;若为聚类,则传入数据。无默认值 |
test_size | 接收float、int。表示测试集的大小。若传入为float型参数值,则应介于0~1之间,表示测试集在总数据集中的占比;若传入为int型参数值,则表示测试样本的绝对数量。默认为None |
train_size | 接收float、int。表示训练集的大小,传入的参数值说明与test_size参数的参数值说明相似。默认为None |
random_state | 接收int。表示用于随机抽样的伪随机数发生器的状态。默认为None |
shuffle | 接收bool。表示在拆分数据集前是否对数据进行混洗。默认为True |
stratify | 接收array。表示用于保持拆分前类的分布平衡。默认为None |
train_test_split函数可分别将传入的数据集划分为训练集和测试集。
如果传入的是一组数据集,那么生成的就是这一组数据集随机划分后的训练集和测试集,总共两组。
如果传入的是两组数据集,则生成的训练集和测试集分别两组,总共4组。
将breast_cancer数据集划分为训练集和测试集,如以下代码。
(三)、使用sklearn转换器进行数据预处理与降维
为了帮助用户实现大量的特征处理相关操作,sklearn将相关的功能封装为转换器。 转换器主要包括3个方法:fit()、transform()和fit_transform()。转换器的3种方法及其说明如下表所示。
方法名称 | 方法说明 |
fit() | 主要通过分析特征和目标值提取有价值的信息,这些信息可以是统计量、权值系数等。fit() 方法用于从数据中学习参数,不进行实际的数据转换。 |
transform() | 主要用于对特征进行转换。transform() 方法使用已经学习到的参数对数据进行转换,因此在调用 transform() 之前必须先调用 fit()。 |
fit_transform() | 即先调用fit()方法,然后调用transform()方法 |
sklearn除了提供离差标准化函数MinMaxScaler外,还提供了一系列数据预处理函数,如下表所示。
函数名称 | 函数说明 |
StandardScaler | 对特征进行标准差标准化 |
Normalizer | 对特征进行归一化 |
Binarizer | 对定量特征进行二值化处理 |
OneHotEncoder | 对定性特征进行独热编码处理 |
FunctionTransformer | 对特征进行自定义函数变换 |
PCA
sklearn除了提供基本的特征变换函数外,还提供了降维算法、特征选择算法,这些算法的使用也是通过转换器的方式进行的。
sklearn的decomposition模块中提供了PCA类,可实现对数据集进行PCA降维,PCA类的基本使用格式如下。
class sklearn.decomposition.PCA(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)
参数名称 | 参数说明 |
n_components | 接收int、float、'mle'。表示降维后要保留的特征纬度数目。若未指定参数值,则表示所有特征均会被保留下来;若传入为int型参数值,则表示将原始数据降低到n个维度;若传入为float型参数值,则将根据样本特征方差来决定降维后的维度数;若赋值为“mle”,则将会使用MLE算法来根据特征的方差分布情况自动选择一定数量的主成分特征来降维。默认为None |
copy | 接收bool。表示是否在运行算法时将原始训练数据进行复制。若为True,则运行算法后原始训练数据的值不会有任何改变;若为False,则运行算法后原始训练数据的值将会发生改变。默认为True |
whiten | 接收bool。表示对降维后的特征进行标准化处理,使得具有相同的方差。默认为False |
svd_solver | 接收str。表示使用的SVD算法,可选randomized、full、arpack、auto。randomized一般适用于数据量大,数据维度多,同时主成分数目比例又较低的PCA降维。full是使用SciPy库实现的传统SVD算法。arpack和randomized的适用场景类似,区别在于,randomized使用的是sklearn自己的SVD实现,而arpack直接使用了SciPy库的sparse SVD实现。auto则代表PCA类会自动在上述3种算法中去权衡,选择一个合适的SVD算法来降维。默认为auto |
二、 构建并评价聚类模型
(一)、使用sklearn估计器构建聚类模型
聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度将它们划分为若干组,划分的原则是组内(内部)距离最小化,而组间(外部)距离最大化,如图所示。
常用的聚类算法及其类别如下表所示。
算法类别 | 包括的主要算法 |
划分(分裂)方法 | K-Means算法(K-平均)、K-MEDOIDS算法(K-中心点)和CLARANS算法(基于选择的算法) |
层次分析方法 | BIRCH算法(平衡迭代规约和聚类)、CURE算法(代表点聚类)和CHAMELEON算法(动态模型) |
基于密度的方法 | DBSCAN算法(基于高密度连接区域)、DENCLUE算法(密度分布函数)和OPTICS算法(对象排序识别) |
基于网格的方法 | STING算法(统计信息网络)、CLIOUE算法(聚类高维空间)和WAVE-CLUSTER算法(小波变换) |
sklearn常用的聚类算法模块cluster提供的聚类算法及其适用范围如下表所示。
算法名称 | 参数 | 适用范围 | 距离度量 |
K-Means | 簇数 | 可用于样本数目很大、聚类数目中等的场景 | 点之间的距离 |
Spectral clustering | 簇数 | 可用于样本数目中等、聚类数目较小的场景 | 图距离 |
Ward hierarchical clustering | 簇数 | 可用于样本数目较大、聚类数目较大的场景 | 点之间的距离 |
Agglomerative clustering | 簇数、链接类型、距离 | 可用于样本数目较大、聚类数目较大的场景 | 任意成对点线图间的距离 |
聚类算法模块cluster提供的聚类算法及其适用范围续表。
算法名称 | 参数 | 适用范围 | 距离度量 |
DBSCAN | 半径大小、最低成员数目 | 可用于样本数目很大、聚类数目中等的场景 | 最近的点之间的距离 |
Birch | 分支因子、阈值、可选全局集群 | 可用于样本数目很大、聚类数目较大的场景 | 点之间的欧式距离 |
聚类算法实现需要使用sklearn估计器(estimator)。
sklearn估计器拥有fit()和predict()两个方法,其说明如下表所示。
方法名称 | 方法说明 |
fit() | fit()方法主要用于训练算法。该方法可接收用于有监督学习的训练集及其标签两个参数,也可以接收用于无监督学习的数据 |
predict() | predict()方法用于预测有监督学习的测试集标签,亦可以用于划分传入数据的类别 |
(二)、使用sklearn转换器进行数据预处理与降维
TSNE类
使用customer数据集,通过sklearn估计器构建K-Means聚类模型,对客户群体进行划分。
并使用sklearn的manifold模块中的TSNE类可实现多维数据的可视化展现功能,查看聚类效果,TSNE类的基本使用格式如下。
class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate=200.0, n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric='euclidean', init='random', verbose=0, random_state=None, method='barnes_hut', angle=0.5, n_jobs=None, square_distances='legacy')
import pandas as pd
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 读取数据集
filepath = 'D:\Desktop\data\customer.csv'
customer = pd.read_csv(filepath, encoding='gbk')
customer_data = customer.iloc[:, :-1]
customer_target = customer.iloc[:, -1]
# Kmeans聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=6,random_state=6).fit(customer_data)
# 使用TSNE进行数据降维,降成两维
tsne = TSNE(n_components=2, init='random',random_state=2).fit(customer_data)
df = pd.DataFrame(tsne.embedding_) # 将原始数据转
df['labels'] = kmeans.labels_ # 将聚类结果存储进df
# 提取不同标签的数据
df1 = df[df['labels'] == 0]
df2 = df[df['labels'] == 1]
df3 = df[df['labels'] == 2]
df4 = df[df['labels'] == 3]
df5 = df[df['labels'] == 4]
df6 = df[df['labels'] == 5]# 绘制图形
fig = plt.figure(figsize=(9, 6)) # 设定空白画布,为
# 用不同的颜色表示不同数据
plt.plot(df1[0], df1[1], 'bo', df2[0], df2[1], 'r*',df3[0], df3[1], 'gD', df4[0], df4[1], 'kD',df5[0], df5[1], 'ms', df6[0], df6[1], 'co' )
plt.show() # 显示图片
(三)、评价聚类模型
除了轮廓系数评价法以外的评价方法,在不考虑业务场景的情况下都是得分越高,其效果越好,最高分值为1。
而轮廓系数评价法则需要判断不同类别数目情况下的轮廓系数的走势,寻找最优的聚类数目。
综合以上聚类评价方法,在真实值作为参考的情况下,几种方法均可以很好地评估聚类模型。
在没有真实值作为参考的时候,轮廓系数评价法和Calinski-Harabasz指数评价法可以结合使用。
from sklearn.metrics import fowlkes_mallows_score
for i in range(1, 7):# 构建并训练模型kmeans = KMeans(n_clusters=i, random_state=6).fit(customer_data) score = fowlkes_mallows_score(customer_target, kmeans.labels_)print('customer数据聚%d类FMI评价分值为:%f' % (i, score))from sklearn.metrics import silhouette_score
silhouettteScore = []
for i in range(2, 10):# 构建并训练模型kmeans = KMeans(n_clusters=i,random_state=6).fit(customer_data) score = silhouette_score(customer_data, kmeans.labels_)silhouettteScore.append(score)
plt.figure(figsize=(10, 6))
plt.plot(range(2, 10), silhouettteScore,
linewidth=1.5, linestyle='-')plt.show()
相关文章:

数据分析与应用-----使用scikit-learn构建模型
目录 一、使用sklearn转换器处理数据 (一)、加载datasets模块中的数据集 (二)、将数据集划分为训练集和测试集 编辑 train_test_spli (三)、使用sklearn转换器进行数据预处理与降维 PCA 二、 构…...

003 flutter初始文件讲解(2)
1.书接上回 首先,我们先来看看昨天最后的代码及展示效果: import "package:flutter/material.dart";void main(){runApp(MaterialApp(home:Scaffold(appBar:AppBar(title:Text("The World")), body:Center(child:Text("Hello…...
Windows系统下 NVM 安装 Node.js 及版本切换实战指南
以下是 Windows 11 系统下使用 NVM 安装 Node.js 并实现版本自由切换的详细步骤: 一、安装 NVM(Node Version Manager) 1. 卸载已有 Node.js 如果已安装 Node.js,请先卸载: 控制面板 ➔ 程序与功能 ➔ 找到 Node.js…...
基于热力学熵增原理的EM-GAM
简介 简介:提出基于热力学熵增原理的EM-GAN,通过生成器熵最大化约束增强输出多样性。引入熵敏感激活函数与特征空间熵计算模块,在MNIST/CelebA等数据集上实现FID分数提升23.6%,有效缓解模式崩溃问题。 论文题目:Entropy-Maximized Generative Adversarial Network (EM-G…...
2025.05.28-华为暑期实习第一题-100分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. K小姐的网络信号优化方案 问题描述 K小姐在负责一个智慧城市项目,该项目需要在一条主干道上部署无线信号发射器。这条主干道有 n n...
鸿蒙OSUniApp滑动锁屏实战:打造流畅优雅的移动端解锁体验#三方框架 #Uniapp
UniApp滑动锁屏实战:打造流畅优雅的移动端解锁体验 引言 移动应用的安全性和用户体验是开发中不可忽视的重要环节。滑动锁屏作为一种直观、安全且用户友好的解锁方式,在移动应用中得到广泛应用。本文将深入探讨如何使用UniApp框架实现一个功能完备、动…...
数据库中 用一个值实现类似linux中的读 写执行以及理解安卓杂用的按位或运算
数据库定义了一个字段叫 allow, 4 读2 写 1 执行 如果是 7 就代表是可读可写 可执行 ,如果是5 就是可读 可执行 , 那具体代码咋写呢 [Flags] public enum Permission {None 0,Execute 1,Write 2,Read 4 }// 假设你从数据库取到的 allow 值是一个整数…...

什么是数据驱动?以及我们应如何理解数据驱动?
在谈到企业数字化转型时,很多人都会说起“数据驱动”,比如“数据驱动运营”、“数据驱动业务”等等。 在大家言必称“数据驱动”的时代背景下,我相信很多人并未深究和思考“数据驱动”的真正含义,只是过过嘴瘾罢了。那么ÿ…...

opencv(C++) 图像滤波
文章目录 介绍使用低通滤波器对图像进行滤波工作原理均值滤波器(Mean Filter / Box Filter)高斯滤波器(Gaussian Filter)案例实现通过滤波实现图像的下采样工作原理实现案例插值像素值(Interpolating pixel values)双线性插值(Bilinear interpolation)双三次插值(Bicu…...
【线上故障排查】缓存热点Key导致Redis性能下降的排查与优化(面试题 + 3 步追问应对 + 案例分析)
一、高频面试题 问题1:什么是缓存热点Key?它对Redis性能有什么影响? 参考答案: 缓存热点Key指的是短时间内被大量请求访问的缓存键。因为Redis是单线程处理请求的,一旦某个Key被高频访问,会导致线程长时间忙于处理它,其他请求只能排队等待,这会让Redis整体响应变慢、…...

cuda_fp8.h错误
现象: cuda_fp8.h错误 原因: CUDA Toolkit 小于11.8,会报fp8错误,因此是cuda工具版本太低。通过nvcc --version查看 CUDA Toolkit 是 NVIDIA 提供的一套 用于开发、优化和运行基于 CUDA 的 GPU 加速应用程序的工具集合。它的核心作用是让开发…...

Java设计模式从基础到实际运用
第一部分:设计模式基础 1. 设计模式概述 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结,它描述了在软件设计过程中一些不断重复出现的问题以及该问题的解决方案。设计模式是在特定环境下解决软件设计问题…...
网络安全基础--第九天
动态路由: 所有路由器上运行同一种动态路由协议,之后通过路由器协商沟通,最终计算生成 路由条目。 静态路由的优点: 1.选路是由管理员选择,相对更好控制,更加合理 2.无需占用额外资源 3.更加安全 缺点…...
鸿蒙如何引入crypto-js
import CryptoJS from ohos/crypto-js 报错。 需要先安装ohom:打开DevEco,点击底部标签组(有Run, Build, Log等)中的Terminal,在Terminal下执行: ohpm install 提示 install completed in 0s 119ms&…...
通过HIVE SQL获取每个用户的最大连续登录时常
样本数据导入: drop table if exists user_login; create table user_login ( user_id bigint ,login_date string ) ;insert into table user_login values (1,2025-04-01) ,(1,2025-04-02) ,(1,2025-04-03) ,(1,2025-04-05) ,(1,2025-04-06) ,(2,2025-04-01) …...

如何轻松将 iPhone 备份到外部硬盘
当您的iPhone和电脑上的存储空间有限时,您可能希望将iPhone备份到外部硬盘上,这样可以快速释放iPhone上的存储空间,而不占用电脑上的空间,并为您的数据提供额外的安全性。此外,我们还提供 4 种有效的解决方案ÿ…...
Matlab数据类型
本篇介绍我在南农matlab课程上的所学,我对老师ppt上的内容重新进行了整理并且给出代码案例。主要内容在矩阵。如果真的想学matlab,我不认为有任何文档能够超过官方文档,请移步至官网,本篇说实话只是写出来给自己和学弟学妹作期末复…...

痉挛性斜颈带来的困扰
当颈部不受控制地扭转歪斜,生活便被打乱了节奏。颈部肌肉异常收缩,导致头部不自觉偏向一侧或后仰,不仅让外观明显异于常人,还会引发持续的酸痛与僵硬感。长时间保持扭曲姿势,肩颈肌肉过度紧绷,甚至会牵连背…...

AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为
帕利塞德研究公司(Palisade Research)近期开展的一系列测试揭示了先进AI系统在被要求自行关闭时的异常行为。测试结果显示,OpenAI的实验性模型"o3"即使在明确收到允许关闭的指令后,仍会主动破坏关机机制。 测试方法与异常发现 研究人员设计实…...
Flask项目进管理后台之后自动跳回登录页面,后台接口报错422,权限问题
今天准备部署一个python项目,先从代码仓down下来本地测了一下,发现登录成功后又自动跳回登录页了,然后后台接口报错422显示没权限,应该是token解析时出错,但是开发这个项目的同事是没问题的。 本来以为是浏览器或者配…...
HarmonyOS如何优化鸿蒙Uniapp的性能?
针对鸿蒙Uniapp应用的性能优化,可以围绕渲染效率、资源管理、代码逻辑等核心方向展开,结合鸿蒙系统特性和ArkUI框架能力进行针对性调整 一、滚动与动画性能优化 帧率优化 使用requestAnimationFrame替代setTimeout/setInterval处理滚动和动画࿰…...
使用逆强化学习对网络攻击者的行为偏好进行建模
摘要 本文提出了一种整体方法,利用逆强化学习(IRL)从系统级审计日志中对攻击者偏好进行建模。对抗建模是网络安全中的一项重要能力,它使防御者能够描述潜在攻击者的行为特征,从而能够归因于已知的网络对抗团体。现有方…...
青少年编程与数学 02-020 C#程序设计基础 12课题、使用控件
青少年编程与数学 02-020 C#程序设计基础 12课题、使用控件 一、控件二、控件的分类1. 按功能分类2. 按可见性分类 三、控件的核心特性(一) 属性(Properties) - 控件的"状态描述"1. 外观属性2. 布局属性3. 行为属性4. 数据绑定属性 (二) 方法(Methods) - 控件的"…...

一文认识并学会c++模板初阶
文章目录 泛型编程:概念 函数模板概念:🚩函数模板格式原理:🚩函数模板实例化与非模板函数共存 类模板类模板实例化 泛型编程: 概念 🚩编写与类型无关的通用代码,是代码复写一种手段…...

基于深度学习的工业OCR实践:仪器仪表数字识别技术详解
引言 在工业自动化与数字化转型的浪潮中,仪器仪表数据的精准采集与管理成为企业提升生产效率、保障安全运营的关键。传统人工抄录方式存在效率低、易出错、高危环境风险大等问题,而OCR(光学字符识别)技术的引入,为仪器…...
java导入excel
这样读取excel时,得到的是结果值,而不是单元格的公式 import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil;InputStream inputStream file.getInputStream(); ExcelReader reader ExcelUtil.getReader(inputStream, 1); L…...

回头看,FPGA+RK3576方案的功耗性能优势
作者:Hello,Panda 各位朋友,大家好,熊猫君这次开个倒车,在这个广泛使用Xilinx(Altera)高端SoC的时代,分享一个“FPGAARM”实现的低功耗高性能传统方案。 图1 瑞芯微RK3576电路 当前,…...
csharp ef入门
全局安装 dotnet ef 命令行工具 要 全局安装 dotnet ef 命令行工具(即在任何项目目录下都能使用 dotnet ef 命令),请按以下步骤操作: ✅ 全局安装步骤(推荐) 在终端中运行以下命令: bash复制…...
长短期记忆网络:从理论到创新应用的深度剖析
一、引言 1.1 研究背景 深度学习在人工智能领域的发展可谓突飞猛进,而长短期记忆网络(LSTM)在其中占据着至关重要的地位。随着数据量的不断增长和对时序数据处理需求的增加,传统的神经网络在处理长序列数据时面临着梯度消失和梯…...

LiveNVR 直播流拉转:Onvif/RTSP/RTMP/FLV/HLS 支持海康宇视天地 SDK 接入-视频广场页面集成与视频播放说明
LiveNVR直播流拉转:Onvif/RTSP/RTMP/FLV/HLS支持海康宇视天地SDK接入-视频广场页面集成与视频播放说明 一、视频页面集成1.1 关闭接口鉴权1.2 视频广场页面集成1.2.1 隐藏菜单栏1.2.2 隐藏播放页面分享链接 1.3 其它页面集成 二、播放分享页面集成2.1 获取 iframe 代…...