AI 自学 Lesson1 - Sklearn(开源Python机器学习包)

目录

背景

作为 lesson1 的原因

一、Sklearn 概述

1. Sklearn 算法库

2. 主要组件

3. 核心流程

4. 自带数据集

二、Sklearn 实操&库名称总结

1. 数据导入

2.数据预处理

2.1 数据划分

2.2 数据变换操作

2.3 特征选择

3. 监督学习算法

3.1 监督学习算法-回归

3.2 监督学习算法-分类

4. 无监督学习算法

4.1 聚类算法

4.2 降维算法

5. 评价指标

6. 交叉验证及超参数调优

6.1 交叉验证

6.2 超参数调优


背景

Scikit-learn(简称sklearn)是Python中一个强大且广泛使用的机器学习库,基于其他常用的科学计算库,如NumPy、SciPy和matplotlib。它封装了一系列数据预处理、机器学习算法、模型选择等工具,提供了简单易用的接口,支持包括分类、回归、降维和聚类四大机器学习算法,还包括了特征提取、数据处理和模型评估三大模块。

作为 lesson1 的原因

初学者学习机器学习时推荐从 Scikit-learn(sklearn)开始,主要原因如下:

  1. 易于上手,简洁直观的 API:其所有的机器学习算法几乎都遵循相同的接口如.fit().predict()等。不论是线性回归、支持向量机还是K近邻算法 ,操作方法都相似,初学者不必为每个算法学习不同的调用方式。
  2. 丰富的机器学习算法:Sklearn 涵盖了大量经典的监督学习(分类、回归)、无监督学习(聚类、降维)以及模型评估的常用算法和工具。
  3. 集成了数据预处理功能:在机器学习项目中,数据预处理非常重要,而 Sklearn 提供了强大的预处理工具,例如特征缩放(StandardScaler)、缺失值处理(SimpleImputer)和编码分类变量(OneHotEncoder)。且与模型训练无缝结合,便于构建机器学习管道(Pipeline),简化项目流程。
  4. 自带数据集,适合学习和练习:Sklearn 自带了多个小型经典数据集(如鸢尾花、手写数字、波士顿房价等),这些数据集规模适中,非常适合初学者进行学习和实践。
  5. 强大的文档与社区支持《sklearn 官方文档》
  6. 提供模型评估与选择工具:Sklearn 提供了多种评估方法(如交叉验证、混淆矩阵、ROC 曲线等)和模型选择工具(如网格搜索 GridSearchCV、随机搜索 RandomizedSearchCV)。
  7. 支持跨多个机器学习任务:Sklearn支持分类、回归、聚类、降维等多种任务,它还提供管道(Pipeline)和特征选择等高级功能。
  8. 与其他库的无缝集成:Sklearn与Python生态系统中的其他数据科学库(如 NumPyPandasMatplotlib)无缝集成。进阶到更复杂的深度学习或大规模数据处理时,Sklearn 也能轻松与 TensorFlowPyTorch 等框架进行集成。

一、Sklearn 概述

1. Sklearn 算法库

Scikit-Learn 库的算法主要有四类:分类、回归、聚类、降维。在此列举各类别中常用的部分:

  1. 回归:线性回归、决策树回归、SVM回归、KNN 回归;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
  2. 分类:线性分类、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
  3. 聚类:K均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN。
  4. 降维:LinearDiscriminantAnalysis、PCA。

2. 主要组件

  • 模型训练与预测:各种分类、回归和聚类算法。
  • 模型评估:交叉验证、准确率、混淆矩阵等评估方法。
  • 数据预处理:特征标准化、归一化、数据转换、缺失值处理等。
  • 管道(Pipeline):将多个步骤串联为一个工作流,简化代码。

3. 核心流程

一般数据处理工作流程如下:

  1. 导入数据:可以使用 sklearn 自带的数据集,或加载自己的数据。
  2. 数据预处理:包括特征缩放、缺失值填充等。
  3. 选择模型:从 sklearn 中导入合适的算法模型。
  4. 训练模型:通过.fit()方法训练模型。
  5. 预测与评估:通过 .predict() 进行预测,使用评估指标评估模型性能。

图示 sklearn 的基本建模流程:

符号代表含义符号代表含义
X_train训练数据y_train训练集标签
X_test测试数据y_test测试集标签
X完整数据y数据标签
y_pred预测标签

底层逻辑就是,将一个数据集分为两部分,多数(训练集)用来 “找规律”,少数(测试集)用来 “验证规律”,其中测试后发现规律正确率高时,可以使用该规律进行 “预测”

4. 自带数据集

sklearn.datasets 模块提供了一系列加载和获取著名数据集如鸢尾花、波士顿房价、Olivetti 人脸、MNIST 数据集等的工具,也包括了一些toy data如S型数据等的生成工具。

这些 Scikit-learn 内置的可以用于机器学习的数据,分为可以直接使用的数据集、需下载的数据集以及生成数据集。

1)可以直接使用的自带数据集

此类数据集可以直接导入使用数据,数据集和描述见下表:

数据集名称描述类型维度
load_bostonBoston房屋价格回归506*13
fetch_california_housing加州住房回归20640*9
load_diabetes糖尿病回归442*10
load_digits手写字分类1797*64
load_breast_cancer乳腺癌分类、聚类(357+212)*30
load_iris鸢尾花分类、聚类(50*3)*4
load_wine葡萄酒分类(59+71+48)*13
load_linnerud体能训练多分类20

2)需要下载的自带数据集

此类数据集第一次使用,需要联网下载数据,数据集和描述见下表:

数据集名称描述
fetch_20newsgroups用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。返回一个可以被文本特征提取器
fetch_20newsgroups_vectorized这是上面这个文本数据的向量化后的数据,返回一个已提取特征的文本序列,即不需要使用特征提取器
fetch_california_housing加利福尼亚的房价数据,总计20640个样本,每个样本8个属性表示,以及房价作为target,所有属性值均为number,详情可调用。如:fetch_california_housing( )[‘DESCR’],了解每个属性的具体含义;
fetch_covtype森林植被类型,总计581012个样本,每个样本由54个维度表示(12个属性,其中2个分别是onehot4维和onehot40维),以及target表示植被类型1-7,所有属性值均为number,详情可调用fetch_covtype( )[‘DESCR’]了解每个属性的具体含义
fetch_kddcup99KDD竞赛在1999年举行时采用的数据集,KDD99数据集仍然是网络入侵检测领域的事实Benckmark,为基于计算智能的网络入侵检测研究奠定基础,包含41项特征
fetch_lfw_pairs该任务称为人脸验证:给定一对两张图片,二分类器必须预测这两个图片是否来自同一个人。
fetch_lfw_people打好标签的人脸数据集
fetch_mldata从 mldata.org 中下载数据集
fetch_olivetti_facesOlivetti 脸部图片数据集
fetch_rcv1路透社新闻语聊数据集
fetch_species_distributions物种分布数据集

3)生成数据集

此类数据集可以用来分类任务,可以用来回归任务,可以用来聚类任务,用于流形学习的,用于因子分解任务的,用于分类任务和聚类任务的:这些函数产生样本特征向量矩阵以及对应的类别标签集合,数据集和描述见下表:

数据集名称描述
make_blobs多类单标签数据集,为每个类分配一个或多个正态分布的点集
make_classification多类单标签数据集,为每个类分配一个或多个正态分布的点集,提供了为数据添加噪声的方式,包括维度相关性,无效特征以及冗余特征等
make_gaussian-quantiles将一个单高斯分布的点集划分为两个数量均等的点集,作为两类
make_hastie-10-2产生一个相似的二元分类数据集,有10个维度
make_circle和make_moons产生二维二元分类数据集来测试某些算法的性能,可以为数据集添加噪声,可以为二元分类器产生一些球形判决界面的数据

 使用时,导入数据的方法如下:

from sklearn.datasets import 数据集名称

Scikit-learn 支持以 NumPy 的 arrays 对象、Pandas 对象、SciPy 的稀疏矩阵及其他可转换为数值型 arrays 的数据结构作为其输入,前提是数据必须是数值型的。

二、Sklearn 实操&库名称总结

1. 数据导入

#导入内置的鸢尾花数据
from sklearn.datasets import load_iris

iris = load_iris()
#定义数据、标签
X = iris.data
y = iris.target

2.数据预处理

2.1 数据划分

机器学习的数据,可以划分为训练集、验证集和测试集,也可以划分为训练集和测试集。

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    random_state=12,
                                                    stratify=y,
                                                    test_size=0.3)
#将完整数据集的70%作为训练集,30%作为测试集,
#并使得测试集和训练集中各类别数据的比例与原始数据集比例一致(stratify分层策略),另外可通过设置shuffle=True 提前打乱数据。

2.2 数据变换

sklearn.preprocessing 模块包含了数据变换的主要操作,下表列举了进⾏数据变换的常用库:

预处理操作库名称
标准化StandardScaler
最小最大标准化MinMaxScaler
One-Hot编码OneHotEncoder
归一化Normalizer
二值化(单个特征转换)Binarizer
标签编码LabelEncoder
缺失值填补Imputer
多项式特征生成PolynomialFeatures

数据变换的方法如下:

from sklearn.preprocessing import 库名称

实例代码:

#使⽤Scikit-learn进⾏数据标准化
from sklearn.preprocessing import StandardScaler

#构建转换器实例
scaler = StandardScaler( )

#拟合及转换
scaler.fit_transform(X_train)

其他常用的预处理操作还包括:

  • 缺失值填充:使用 SimpleImputer 来填充缺失数据。
  • 类别编码:使用 OneHotEncoder 对分类特征进行编码。

2.3 特征选择

特征选择通过去除无关或冗余的特征来提高模型性能和计算效率,方法如下:

#导入特征选择库
from sklearn import feature_selection as fs
  • 过滤式(Filter)
#保留得分排名前k的特征(top k方式)
fs.SelectKBest(score_func, k)

#交叉验证特征选择
fs.RFECV(estimator, scoring=“r2”)
  • 封装式(Wrapper),结合交叉验证的递归特征消除法,自动选择最优特征个数:
fs.SelectFromModel(estimator)
  • 嵌入式(Embedded),从模型中自动选择特征,任何具有coef_或者feature_importances_的基模型都可以作为estimator参数传入。

3. 监督学习算法

3.1 监督学习算法-回归

表常见的回归模型

回归模型名称库名称
线性回归LinearRegression
岭回归Ridge
LASSO回归LASSO
ElasticNet回归ElasticNet
决策树回归tree.DecisionTreeRegressor

实例代码:

#从线性模型库导入线性回归模型
from sklearn.linear_model import LinearRegression
# 构建模型实例
lr = LinearRegression(normalize=True)
# 训练模型
lr.fit(X_train, y_train)
# 作出预测
y_pred = lr.predict(X_test)

3.2 监督学习算法-分类

表常见的分类模型

模型名称库名称
逻辑回归linear model.LogisticRearession
支持向量机svm.SVC
朴素贝叶斯naïve_bayes.GaussianNB
KNNneighbors.NearestNeighbors
随机森林ensemble.RandomForestClassifier
GBDTensemble.GradientBoostingClassifier

4. 无监督学习算法

4.1 聚类算法

sklearn.cluster模块包含了一系列无监督聚类算法,聚类使用的方法如下:

from sklearn.cluster import 库名称

表常见的聚类模型

模型名称库名称
K-meansKMeans
DBSCANDBSCAN
层次聚类AgglomerativeClustering
谱聚类SpectralClustering
#从聚类模型库导入kmeans  
from sklearn.cluster import KMeans  
#构建聚类实例  
kmeans = KMeans(n_clusters=3, random_state=0)  
#拟合  
kmeans.fit(X_train)  
#预测  
kmeans.predict(X_test) 

4.2 降维算法

Scikit-learn中降维算法都被包括在模块decomposition中,sklearn.decomposition模块本质是一个矩阵分解模块。最常见的降维方法是PCA(主成分分析)。

降维的使用的方法如下:

from sklearn.decomposition import 库名称

代码示例:

#导入PCA库
from sklearn.decomposition import PCA
#设置主成分数量为3,n_components代表主成分数量
pca = PCA(n_components=3)
#训练模型
pca.fit(X)
#投影后各个特征维度的方差比例(这里是三个主成分)
print(pca.explained_variance_ratio_)
#投影后的特征维度的方差
print(pca.explained_variance_)

5. 评价指标

sklearn.metrics 模块包含了一系列用于评价模型的评分函数、损失函数以及成对数据的距离度量函数。评价指标主要分为分类评价指标、回归评价指标等等,这里列举了常见的几种评价指标。

评价指标使用的方法如下:

from sklearn.metrics import 库名称

实例代码:

评价指标库名称使用范围
正确率accuracy_score分类
精确率precision_score分类
F1 值f1_score分类
对数损失log_loss分类
混淆矩阵confusion_matrix分类
含多种评价的分类报告classification_report分类
均方误差MSEmean_squared_error回归
平均绝对误差MAEmean_absolute_error回归
决定系数R2r2_score回归

实例代码:

#从评价指标库导入准确率
from sklearn.metrics import accuracy_score
#计算样本的准确率
accuracy_score(y_test, y_pred)
#对于测试集而言,大部分函数都必须包含真实值y_test和预测值y_pred

6. 交叉验证及超参数调优

6.1 交叉验证

代码示例:

#从模型选择库导入交叉验证分数  
from sklearn.model_selection import cross_val_score    
clf = DecisionTreeClassifier(max_depth=5)  
#使用5折交叉验证对决策树模型进行评估,使用的评分函数为F1值  
scores = cross_val_score(clf, X_train, y_train,cv=5, scoring='f1_weighted')

此外,Scikit-learn 提供了部分带交叉验证功能的模型类如 LogisticRegressionCVLassoCV等,这些类包含CV参数。

6.2 超参数调优

在机器学习中,超参数是指无法从数据中学习而需要在训练前提供的参数。机器学习模型的性能在很大程度上依赖于寻找最佳超参数集。

超参数调整一般是指调整模型的超参数,这基本上是一个非常耗时的过程。目前主要有 3 种最流行的超参数调整技术:网格搜索、随机搜索和贝叶斯搜索,其中Scikit-learn内置了网格搜索、随机搜索,本章进行简单讲解,其余调参方法如贝叶斯搜索,本章不进行讨论。

  • 1.超参数调优⸺网格搜索

代码示例:

#从模型选择库导入网格搜索
from sklearn.model_selection import GridSearchCV
from sklearn import svm

svc = svm.SVC()
#把超参数集合作为字典
params = {'kernel': ['linear', 'rbf'], 'C': [1, 10]}
#进行网格搜索,使用了支持向量机分类器,并进行五折交叉验证
grid_search = GridSearchCV(svc, params, cv=5)
#模型训练
grid_search.fit(X_train, y_train)
#获取模型最优超参数组合
grid_search.best_params_

在参数网格上进行穷举搜索,方法简单但是搜索速度慢(超参数较多时),且不容易找到参数空间中的局部最优。

  • 2.超参数调优⸺随机搜索

代码示例:

#从模型选择库导入随机搜索
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

svc = svm.SVC()
#把超参数组合作为字典
param_dist = {'kernel': ['linear', 'rbf'], 'C': randint(1, 20)}
#进行随机搜索
random_search = RandomizedSearchCV(svc, param_dist, n_iter=10)
#模型训练
random_search.fit(X_train, y_train)
#获取最优超参数组合
random_search.best_params_

在参数子空间中进行随机搜索,选取空间中的100个点进行建模(可从scipy.stats常见分布如正态分布norm、均匀分布uniform中随机采样得到),时间耗费较少,更容易找到局部最优。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lu_rong_qq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值