数据科学 - Sklearn库总结

1. 前言

通过上几章对数据预处理的理解,最后来到我们数据分析的核心之一,机器学习。

机器学习涵盖了许多方面,如若每一次处理都是通过手写代码的方式去处理我们的数据集是十分繁琐,复杂的。但在scikit-learn库中,提供了许多常用的机器学习模型,涵盖了分类,回归,聚类,降维等不同类型的任务。

在进入机器学习之前,数据预处理对于机器学习还有两个重要的部分

2. 数据预处理

2.1 数据集的划分

将数据集划分为训练集和测试集

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)

•train_test_split划分数据集首先划分特征矩阵,其次是目标向量

•test_size : 测试集的比例或数量,可以是浮点数表示比例,也可以是整数表示测试集样本数,test_size被指定之后会自动计算出train_size

• random_state:随机种子,用于保证划分的可重复性。同样的随机种子会导致相同的划分结果,即使在不同时间或环境下运行相同的代码,生成的随机序列也会保持一致。

2.2 数据标准化

数据标准化是指将数据集调整为均值为0,方差为1。

数据标准化的目的在于将特征数据缩放到同一尺度,避免某些特征对模型训练产生过大或过小的影响。提升模型鲁棒性,在面对异常值或噪声数据时,标准化后的模型通常表现的更加鲁棒,标准化能够减少异常值的影响。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train) #计算均值与标准差
scaler.transform(X_train) #对数据进行标准化
scaler.fit_transform(X_train) #一步到位
scaler.fit(X_test) #根据训练集的均值与标准差标准化测试集

转化之后的数据会与原有数据格式保持一致。

需要注意的是

•在对训练集进行标准化后,也应该使用相同的scaler对象对测试集进行转换

•标准化数据之后特征值会变的难以解释,因此在对模型输出进行解释的时候需要特别注意

3. 机器学习模型

3.1 分类模型

3.1.1 Logistic回归

功能:主要用于二分类问题,也可以拓展到多分类问题

算法详解:机器学习全解 - Logistic回归(含算法讲解,公式全解,手写代码实现,调包实现)-CSDN博客

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train,y_train)

 主要参数:

penalty正则化类型,可以选择‘l1’,'elasticnet',用于防治过拟合
solver优化算法的选择,例如:'lbfgs',‘liblinear’,‘sag’,‘sage’
max_iter最大迭代次数,默认值为100。这个参数在数据集较大的时候,可能需要增加以此保持收敛
multi_class处理多分类任务

3.1.2 K近邻分类器

功能:基于最近的K个邻居进行分类

KNN的核心思想是,对于一个待分类的样本,他会寻找在特征空间中距离该样本最近的K个样本,并根据这些邻居的类别决定该样本的类别

1. 计算距离:对于待分类的样本,计算它与训练集中所有样本之间的距离。

2. 选择最近的K个邻居:根据计算出的距离,选择距离最近的K个样本。

3. 投票表决:让这K个类别投票,选择类别占多数的作为新样本的类别。

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train,y_train)y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test,y_pred)

主要参数: 

n_neighbors设置投票样本数量。K的值通常通过交叉验证的方式确定,较小的K会导致模型变得灵活,较大的K值则使模型更加平滑
weights

指定投票样本权重,'uniform'(每个权重相等),'distance'(离得近的权重越大)

metric用于计算距离的度量标准

3.1.3 SVC支持向量机

算法详解请参考:超简单白话文机器学习 - 支持向量机SVM(含算法讲解,公式全解,手写代码实现,调包实现)_支持向量机(svm)-CSDN博客

from sklearn.svm import SVC
model = SVC(kernel='rbf') #kernel代表的是核函数
model.fit(X_train,y_train)

SVC的各个参数可以进行调节:

C

正则化参数。C 值越大,对误分类的惩罚越大,模型会更倾向于正确分类训练集中的每个样本,但可能导致过拟合。默认值为 1.0

kernel

kernel: 核函数类型。常用的有 linear(线性核),poly(多项式核),rbf(高斯核/径向基函数核),sigmoid(Sigmoid 核)。默认值为 rbf

gamma

gamma: 核函数系数。对于 rbf、poly 和 sigmoid 核,gamma 定义了支持向量的影响范围。gamma 值越大,模型越倾向于将训练样本分类正确,但可能导致过拟合。可以设置为 scale(默认)或 auto

degree

degree: 多项式核函数的次数,仅当 kernel='poly' 时有效。默认值为 3

3.1.4 RandomForest随机森林

功能:基于多棵决策树进行分类

工作原理:

1. 随机采样:

•样本随机采样:训练过程中,有放回的从训练数据集随机采样,生成多个样本子集

•特征随机采样:每次分裂结点时,随机选择特征子集而不是使用所有特征,从而增强树的多样性

2. 构建决策树:每个样本子集用于训练一棵决策树,使用上述随机选择的特征子集进行分裂

3. 集成预测:对于分类任务,随机森林将所有的决策树预测结果进行投票,选择获得票数最多的类别作为最终预测结果

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train,y_train)
n_estimators决定森林中树的数量
max_depth控制树的最大深度,防治过拟合
min_samples_split一个结点在分裂前必须具有的最小样本数
min_samples_leaf每个叶子结点应包含的最小样本数
max_features在每次分裂时考虑的特征数量,较少的特征数可以提高模型的多样性
bootstrap是否进行有放回采样

3.1.5 GradientBoostingClassifier梯度提升分类器

功能:集成多个弱分类器以此提高性能

from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier(n_estimators=100)
model.fit(X_train,y_train)

3.1.6 朴素贝叶斯分类器

算法详解:超简单白话文机器学习-朴素贝叶斯算法(含算法讲解,公式全解,手写代码实现,调包实现_朴素贝叶斯代码解析-CSDN博客

from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X_train,y_train)

3.1.7 决策树

通过一系列的二元决策将数据逐步划分,直到每一个叶子结点都属于一个单一的类别

工作原理:

•分裂:在每一个结点处,算法选择一个特征及其对应的阈值,将数据集分裂成两个子集。分裂的目的在于使每个子集中的数据尽可能属于同一个类别

•选择特征:分裂过程中,算法会选择那些能最大程度提高信息增益(或减少基尼指数)的特征

•叶子结点:当结点中的样本全部属于同一类别时,或者不能进一步分裂时,该节点变为叶子结点,并分配一个类别标签

算法详解:超简单白话文机器学习-决策树算法全解(含算法介绍,公式,源代码实现以及调包实现)_白话机器学习算法-CSDN博客

from sklearn.tree import DecisionTreeRegressor
reg = DecisionTreeRegressor()
reg.fit(X_train,y_train)

常用参数: 

criterion用于衡量分裂质量的标准。对于决策树,常用的是'gini'与'entropy'
max_depth控制树的最大深度,避免过拟合
min_samples_split一个结点在分裂之前,必须具有的最小样本数,以此控制树的增长,防治过拟合
min_samples_leaf每个叶子结点最少应包含的样本数

3.2 回归模型

3.2.1 线性回归

适用于回归任务

算法详解:超简单白话文机器学习 - 逐步回归&Lasso,Ridge正则化(含算法讲解,公式全解,手写代码实现,调包实现)-CSDN博客

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train,y_train)
print(model.coef_,model.interceot_)
print(model.score) #R^2评分函数,用于衡量模型的解释力,在0-1之间,越接近1,预测能力越强
fit_intercept是否计算截距

3.2.2 岭回归

算法详解:超简单白话文机器学习 - 逐步回归&Lasso,Ridge正则化(含算法讲解,公式全解,手写代码实现,调包实现)-CSDN博客

功能:带有正则化的线性回归模型

from sklearn.linear_model import Ridge
model = Ridge(alpha=0.1) #惩罚参数
model.fit(X_train,y_train)

3.2.3 Lasso回归

算法详解:超简单白话文机器学习 - 逐步回归&Lasso,Ridge正则化(含算法讲解,公式全解,手写代码实现,调包实现)-CSDN博客

功能:Lasso回归,使用L1正则化的线性回归模型

from sklearn.linear_model import Lasso
model = Lasso()
model.fit(X_train,y_train)
alpha正则化强度,值越大,正则化效应越强,更多的系数被缩减为0,可以通过交叉验证来选择合适的值。默认值为1
fit_intercept是否计算截距

3.2.4 回归树

回归树是一种预测连续数值的算法。通过对数据进行分裂,使得每个叶子结点中的样本具有最小的均方误差(MSE)

工作原理:

分裂:在每个节点处选择特征和阈值,但回归树的目标在于每个子集中的样本输出值尽可能相似

选择特征:通过最小化均方误差来选择特征进行分裂

叶子结点:当进一步分裂不能显著降低误差时,该节点变为叶子结点,且分配一个值作为预测值(通常为均值)

算法详解:超简单白话文机器学习 - 回归树&树剪枝(含算法介绍,公式,源代码实现以及调包实现)-CSDN博客文章浏览阅读1.6k次,点赞33次,收藏28次。我们一般使用CART回归树,CART(Classification and Regression Trees)回归树是一种用于连续值预测的树模型。它通过递归地分裂数据集,以最小化预测误差为目标,最终生成一棵树结构的模型。_回归树https://blog.csdn.net/qq_51222843/article/details/139125581

from sklearn.tree import DecisionTreeRegressor
reg = DecisionTreeRegressor()
reg.fit(X_train,y_train)
criterion用于衡量分裂质量的标准。对于回归树,常用的是mse
max_depth控制树的最大深度,避免过拟合
min_samples_split一个结点在分裂之前,必须具有的最小样本数,以此控制树的增长,防治过拟合
min_samples_leaf每个叶子结点最少应包含的样本数

3.2.5 SVR支持向量机回归

 功能:适用于线性和非线性回归

from sklearn.svm import SVR
model = SVR()
model.fit(X_train,y_train)

 3.2.6 RandomForest随机森林

功能:基于多棵决策树进行分类

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=100)
model.fit(X_train,y_train)

3.2.7 GradientBoostingClassifier梯度提升分类器

功能:集成多个弱分类器以此提高性能

from sklearn.ensemble import GradientBoostingRegressor
model = GradientBoostingRegressor(n_estimators=100)
model.fit(X_train,y_train)

3.3 聚类模型

3.3.1 KMeans均值聚类

功能:适用于无监督学习中的聚类任务

算法详解:机器学习全解 - K均值聚类算法 (含算法介绍,公式,手写代码实现,调包实现)-CSDN博客

from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
model.fit(X)
labels = model.predict(x)

参数详解:

n_clusters指定质心数量
max_iter最大迭代次数
tol判断收敛条件,若质心变化小于这个值,算法停止
algorithm使用的KMeans计算方法

得到我们的模型之后也有相关属性去查看,调用模型信息:

cluster_centers_表示质心坐标,形状为(n_clusters,n_features)
labels_数据集中的每个样本的簇标签
inertia_表示簇内样本距离各自簇心的总和,即SSE;越小,代表越近,聚类效果越好

3.3.2 AgglomerativeClustering层次聚类算法

功能:通过构建聚类树实现聚类

from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_clusters=3)
model.fit(X_train)

3.4 降维模型

3.4.1 PCA主成分分析

功能:主成分分析,用于数据降低维度

算法详解:机器学习全解 - PCA主成分分析(含算法讲解,公式全解,手写代码实现,调包实现)_pca计算公式讲解-CSDN博客

from sklearn.decomposition import PCA
pca = PCA(n_components=2) #维度降为2
X_reduced = pca.fit_transform(X) #直接将原有数据转化#分别进行并且读取属性
pca.fit(X)
print(pca.components_) #读取属性

PCA模型对数据十分敏感,因此在开始之前对数据进行标准化处理,使每个变量的均质为0,方差为1。

相关参数:

n_components保留的主成分数目

相关属性:

components_输出主成分的方向向量,每一行是一个主成分在原始特征空间中的方向

explained_variance_

每个主成分对应的特征值,表示该主成分解释的方差大小,方差越大离散程度就越大
n_features_数据集中原始特征的数量
n_samples_数据集中样本的数量
mean_返回输入数据的均值
singular_values_返回奇艺值分解过程中每个主成分的奇艺值

3.5 数据集成

3.5.1 Bagging

功能:Bagging集成方法,通过多个弱分类器的集成提升模型性能

算法详解:机器学习全解 - 集成学习&Adaboost(含算法讲解,公式全解,手写代码实现,调包实现)_集成学习ada-CSDN博客

from sklearn.ensemble import BaggingClassifier
model = BaggingClassifier(base_estimator=SVC(),n_estimators=10)
model.fit(X_train,y_train)

参数详解:

base_estimator基分类器,默认为DecisionTreeclassifier
n_estimators表示要训练的基分类器数量
max_samples每个子样本中使用的样本数
max_features每个子样本中使用的特征数
bootstrap_features是否有放回抽样
random_state随机性控制

3.5.2 AdaBoost集成

功能:逐步调整分类器权重来提高分类效果

算法详解:机器学习全解 - 集成学习&Adaboost(含算法讲解,公式全解,手写代码实现,调包实现)_集成学习ada-CSDN博客

from sklearn.ensemble import AdaBoostClassifier
model = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(),n_estimators=100)
model.fit(X_train,y_train)

参数详解: 

base_estimator基分类器,默认为DecisionTreeclassifier
n_estimators表示要训练的基分类器数量
learning_rate所见每个弱分类器的贡献
algorithm'SAMME','SAMME.R'不同权重进行方法
random_state随机性控制

3.6 模型管道与选择

3.6.1 Pipeline

功能:将多个数据预处理步骤和模型训练步骤组合成一个可重用的管道

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pipeline = Pipeline([('scaler',StandardScaler()),('svc',SVC(kernel='rbf'))])
pipeline(X_train,y_train)

3.6.2 网格搜索

功能:网格搜索,用于调优超参数,选择最佳模型参数

from sklearn.model_selection import GridSearchCV
param_grid = {'C':[0.1,1,10,100],'gamma':[1,0.1,0.01,0.001],'kernel:['rbf','linear']}from sklearn.svm import SVC
model = SVC()grid_search = GridSearchCV(estimator=model,param_grid=param_grid,cv=5,scoring='accuracy')
grid_search.fit(X_train,y_train)#获取最佳参数
print(grid_seach.best_params_) #返回最佳的超参数组合
print(grid_search.best_score_) #返回最佳组合的交叉验证得分

以下是GridSearchCv的参数详解: 

estimator用于评估的模型,需要先初始化
param_grid用来迭代的参数,矩阵样式进行填充
cv用于交叉验证的次数
scoring指定用于挑选最佳参数的比较特征

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带你彻底搞懂useLayoutEffect的使用场景

开篇第一句: useLayoutEffect 可能会影响性能。尽可能使用 useEffect。 useLayoutEffect 是 useEffect 的一个版本,在浏览器重新绘制屏幕之前触发。 使用方法 useLayoutEffect(setup, dependencies?)调用 useLayoutEffect 在浏览器重新绘制屏幕之前进行布局测量&…

lvs详解及实例配置

目录 1.什么是负载均衡 1.1为什么用负载均衡 1.2.负载均衡类型 1.2.1.四层负载均衡 1.2.2.七层负载均衡 1.3 四层和七层的区别 2.LVS介绍 2.1LVS 的优势与不足 2.2LVS 核心组件和专业术语 3.ipvsadm命令 4.LVS集群中的增删改 4.1.管理集群服务中的增删改 4.2.管理集…

用户态tcp协议栈四次挥手-服务端发送fin时,客户端不返回ac

问题: 四次挥手时,服务端发送fin后,客户端不发送ack,反而过了2min后发了个rst报文 62505是客户端,8889是服务端 解决: 服务端返回fin报文时带上ack标记

数据结构(邓俊辉)学习笔记】优先级队列 03——完全二叉堆:结构

文章目录 1.完全二叉树2.结构性3.形神具备4.堆序性 1.完全二叉树 在上一节我们看到,就优先级队列的实现方式而言,采用基本的向量结构并不足够,而采用更高级的树形结构,虽然完全可以高效率地实现优先级队列,但却有杀鸡…

Codeforces Round 961 【C. Squaring】

C. Squaring 题目大意: 给你一个长度为n的数组,求最少次操作,使得数组(非严格)递增。一次操作:Ai 变为 Ai^2。 不可能实现输出-1。 关键思路: 分子分母同时取对数,比值不变。 …

流量日志分析

流量分析 [陇剑杯 2021]jwt(问1) 要求是通过流量分析判断网站使用的认证方式 在筛选http之后,发现有get请求,要认证方式就需要看请求流量包中的token 然后查看token tokeneyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTAwOD…

动手学深度学习7.3 网络中的网络(NiN)-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:26 网络中的网络 NiN【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:7.3. 网络…

三层架构与解耦——IoCDI机制【后端 7】

三层架构与解耦——IoC&DI机制 在软件开发领域,三层架构(Controller、Service、Dao)是一种广泛采用的架构模式,它通过将应用程序分为三个主要层次来组织代码,旨在提高代码的可维护性、复用性和可扩展性。而解耦&am…

怎么用dos编译python

无论windos还是Linux只要安装了python,配置好了环境变量,则在命令行输入python这个命令的时候就会进入交互模式。在这个模式下可以进行一些简单的python代码编写。退出可以使用exit()方法。 Python程序是可以执行的,例如下面代码&#xff0c…

文心一言 VS 讯飞星火 VS chatgpt (323)-- 算法导论22.4 4题

四、证明或反证下述论断:如果有向图G包含环路,则在算法TOPOLOGICAL-SORT(G)所生成的结点序列里,图G中与所生成序列不一致的“坏”边的条数最少。如果要写代码,请用go语言。 文心一言: 首先,我们需要明确几…

春秋云镜CVE-2023-38836

打开靶场环境 点击发现一个登陆框&#xff0c;弱口令试一下 发现账号密码为admin,password 随便点击点击 Media发现这里可以上传文件上传木马试试 <?php eval($_POST["wjq"]); ?> 发现不能上传php文件 php内容 修改他的格式 抓包绕过一下 302就可以其实已经…

同态加密和SEAL库的介绍(六)BGV 方案

前面介绍 BFV 和 CKKS 加密方案&#xff0c;这两者更为常用。并且也解释了 Batch Encoder 和 级别的概念&#xff0c;这对接下来演示 BGV 会很有帮助。 一、BGV简介 BGV (Brakerski-Gentry-Vaikuntanathan) 方案 是一种基于环学习同态加密&#xff08;RLWE&#xff09;问题的加…

华为OD笔试

机试总分400。三道题目。100&#xff0b;100&#xff0b;200 华为od考试时间为150分钟&#xff0c;共有三道编程题&#xff0c;分数分别为100、100和200。如果你是目标院校&#xff08;查看目标院校请戳&#xff09;的话&#xff0c;及格线是160分&#xff0c;非目标院校则不确…

论文阅读 - Scaling Up k-Clique Densest Subgraph Detection | SIGMOD 2023

1. 论文背景 密集子图发现&#xff08;Densest Subgraph Discovery&#xff09;是图挖掘领域的一个基础研究方向&#xff0c;并且近年来在多个应用领域得到了广泛研究。特别是在生物学、金融学和社交网络分析等领域&#xff0c;密集子图的发现对理解复杂网络结构和行为具有重要…

利用QT和FFmpeg实现一个简单的视频播放器

在当今的多媒体世界中&#xff0c;视频播放已成为不可或缺的一部分。从简单的媒体播放器到复杂的视频编辑软件&#xff0c;视频解码和显示技术无处不在。本示例使用Qt和FFmpeg构建一个简单的视频播放器。利用ffmpeg解码视频&#xff0c;通过QWidget渲染解码后的图像&#xff0c…

Python爬虫——爬取bilibili中的视频

爬取bilibili中的视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入bilibili官网中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频播放页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到…

Ps:通过 RGB 值计算 HSB 值

在 Photoshop 中&#xff0c;HSB&#xff08;色相、饱和度和明度&#xff09;仅作为表达颜色的一种方式而存在&#xff0c;并不是一种颜色模式。 色相/饱和度命令就是基于色彩三要素进行调色的常用命令。 还有一个与 HSB 相关的滤镜&#xff1a;HSB/HSL 滤镜&#xff0c;用于实…

什么是交互测试?

最近有接触到一个有趣的名词&#xff1a;交互测试。 在对这个名词进行解释之前&#xff0c;我先去特意请教了一个产品经理朋友&#xff0c;问下交互的概念。于是知道了我们的行业里面还有很多个有趣的职位&#xff1a;交互设计师、UE、UI、前端、设计.....等等等等这些&#x…

C语言——查漏补缺

前言 本篇博客主要记录一些C语言的遗漏点&#xff0c;完成查漏补缺的工作&#xff0c;如果读者感兴趣&#xff0c;可以看看下面的内容。都是一些小点&#xff0c;下面进入正文部分。 1. 字符汇聚 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 #inclu…

Linux:多线程(三.POSIX信号量、生产消费模型、线程池、其他常见的锁)

上次讲解了&#xff1a;Linux&#xff1a;多线程&#xff08;二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型&#xff09; 文章目录 1.POSIX信号量1.1引入1.2回顾加深理解信号量1.3信号量的操作接口 2.基于循环队列的生产消费模型2.1循环队列2.2整个项目 3.线程…