【数据科学】Scikit-learn[Scikit-learn、加载数据、训练集与测试集数据、创建模型、模型拟合、拟合数据与模型、评估模型性能、模型调整]

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 【数据科学】Scikit-learn[Scikit-learn、加载数据、训练集与测试集数据、创建模型、模型拟合、拟合数据与模型、评估模型性能、模型调整]

一、Scikit-learn

Scikit-learn开源的Python库,通过统一的界面实现机器学习预处理交叉验证及可视化算法

>>> from sklearn import neighbors, datasets, preprocessing
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.metrics import accuracy_score
>>> iris = datasets.load_iris()
>>> X, y = iris.data[:, :2], iris.target
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33)
>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> X_train = scaler.transform(X_train)
>>> X_test = scaler.transform(X_test)
>>> knn = neighbors.KNeighborsClassifier(n_neighbors=5)
>>> knn.fit(X_train, y_train)
>>> y_pred = knn.predict(X_test)
>>> accuracy_score(y_test, y_pred)

  以上是使用 scikit-learn 库 进行 k-最近邻(KNN)分类的流程,得到 KNN 分类器在 iris 数据集上的预测准确率。


二、加载数据

  Scikit-learn 处理的数据是存储为 NumPy 数组或 SciPy 稀疏矩阵的数字,还支持 Pandas 数据框等可转换为数字数组的其它数据类型

>>> import numpy as np
# 导入了 NumPy 库,用于进行数值计算和数组操作
>>> X = np.random.random((10,5))
>>> y = np.array(['M','M','F','F','M','F','M','M','F','F','F'])
>>> X[X < 0.7] = 0

  以上我们使用了 NumPy 库来生成一个随机的 10 行 5 列的矩阵 X,并将小于 0.7 的元素置为 0。同时,创建了一个包含性别标签的 NumPy 数组 y。我们得到一个形状为 (10, 5) 的随机矩阵 X,其中小于 0.7 的元素被置为 0,并创建了一个包含性别标签的数组 y。这些数据可以用于接下来的 分析建模 或其他任务中。


三、训练集与测试集数据

  使用了 scikit-learn 库train_test_split 函数,将数据集划分为 训练集测试集

>>> from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

  得到划分后的训练集和测试集的特征数据 X_train、X_test,以及对应的类别标签数据 y_train、y_test。可以在训练集上进行模型训练,然后使用测试集评估模型的性能和准确率


四、创建模型

4.1 有监督学习评估器

4.1.1 线性回归

  我们使用 scikit-learn 库LinearRegression 类创建一个线性回归模型对象

>>> from sklearn.linear_model import LinearRegression
>>> lr = LinearRegression(normalize=True)

  创建一个线性回归模型对象 lr


4.1.2 支持向量机(SVM)

  我们使用 scikit-learn 库SVC 类,创建一个 支持向量机(SVM)模型对象

>>> from sklearn.svm import SVC
>>> svc = SVC(kernel='linear')

  创建一个支持向量机模型对象 svc,并 使用线性核函数进行分类


4.1.3 朴素贝叶斯

  使用 scikit-learn 库GaussianNB 类,创建一个 朴素贝叶斯模型对象

>>> from sklearn.naive_bayes import GaussianNB
>>> gnb = GaussianNB()

  创建一个朴素贝叶斯模型对象 gnb。朴素贝叶斯模型是一种常用的概率模型,适用于 分类问题


4.1.4 KNN

  使用 scikit-learn 库neighbors 模块,创建一个 K 最近邻(KNN)分类器对象

>>> from sklearn import neighbors
>>> knn = neighbors.KNeighborsClassifier(n_neighbors=5)

  创建一个 KNN 分类器对象 knn,它会 根据最近的邻居来进行分类KNN 是一种 基于实例的学习方法,根据最近邻居的标签进行分类


4.2 无监督学习评估器

4.2.1 主成分分析(PCA)

  使用 scikit-learn 库PCA 类,创建一个 主成分分析(PCA)对象

>>> from sklearn.decomposition import PCA
>>> pca = PCA(n_components=0.95)

  创建一个 PCA 对象 pca,它可以用于降维或特征提取。PCA 是一种常用的降维技术,可 将高维数据映射到低维空间,保留数据的主要特征


4.2.2 K Means

  使用 scikit-learn 库KMeans 类创建一个 K-Means 聚类器对象

>>> from sklearn.cluster import KMeans
>>> k_means = KMeans(n_clusters=3, random_state=0)

  创建一个 K-Means 聚类器对象 k_means,它将根据数据点之间的距离进行聚类。K-Means 是一种常用的聚类算法将数据点分割成预定义数量的簇,使得簇内的数据点尽可能相似,而不同簇之间的数据点差异较大


五、模型拟合

5.1 有监督学习

  展示了 三种不同的机器学习算法在训练集上进行训练的过程

# 拟合数据与模型
>>> lr.fit(X, y)
# 使用逻辑回归算法(Logistic Regression)对数据集(X, y)进行拟合。其中,X是输入特征矩阵,y是对应的目标变量向量
>>> knn.fit(X_train, y_train)
# 使用K近邻算法(K-Nearest Neighbors)对训练集(X_train, y_train)进行拟合。其中,X_train是训练集的输入特征矩阵,y_train是对应的目标变量向量
>>> svc.fit(X_train, y_train)
# 使用支持向量机算法(Support Vector Machine)对训练集(X_train, y_train)进行拟合。其中,X_train是训练集的输入特征矩阵,y_train是对应的目标变量向量

5.2 无监督学习

  对训练集进行聚类特征降维的过程如下。

>>> k_means.fit(X_train) # 拟合数据与模型
>>> pca_model = pca.fit_transform(X_train) # 拟合并转换数据

  模型会根据给定的训练集数据对 K-Means 聚类算法和 PCA 算法进行拟合。对于 K-Means 聚类算法,模型会 学习找到最佳的簇中心点;对于 PCA 算法,模型会 学习找到最佳的主成分投影空间。这些拟合操作会生成相应的模型或转换对象,以便于之后对新的数据进行聚类降维操作


六、拟合数据与模型

6.1 标准化

  以下是对训练集和测试集进行数据标准化的过程。

>>> from sklearn.preprocessing import StandardScaler
>>> scaler = StandardScaler().fit(X_train)
>>> standardized_X = scaler.transform(X_train)
>>> standardized_X_test = scaler.transform(X_test)

  创建一个 StandardScaler 对象 scaler,并 使用训练集的数据对其进行拟合。然后,我们可以使用 scaler 对训练集和测试集进行标准化转换,以确保数据具有相同的尺度和范围,以 提高模型的训练和预测效果


6.2 归一化

  接下来我们学习对训练集和测试集进行数据归一化

>>> from sklearn.preprocessing import Normalizer
>>> scaler = Normalizer().fit(X_train)
>>> normalized_X = scaler.transform(X_train)
>>> normalized_X_test = scaler.transform(X_test)

  创建一个 Normalizer 对象 scaler,并使用训练集的数据对其进行拟合。然后,我们可以 使用 scaler 对训练集和测试集进行归一化转换,以确保数据在特征向量方向上具有单位范数归一化可以使得不同样本之间的特征向量更具可比性,并且有助于某些机器学习算法的训练和预测效果。


6.3 二值化

  这里展示了对数据集进行二值化处理的过程。

>>> from sklearn.preprocessing import Binarizer
>>> binarizer = Binarizer(threshold=0.0).fit(X)
>>> binary_X = binarizer.transform(X)

  创建一个 Binarizer 对象 binarizer,并使用阈值 threshold=0.0 对数据集 X 进行二值化处理。然后,我们可以 使用 binarizer 对数据集进行二进制转换,并将结果保存在变量 binary_X 中二值化可以使得不同样本之间的特征更具可比性,并且有助于某些机器学习算法的训练和预测效果。


6.4 编码分类特征

  使用 LabelEncoder对目标变量进行标签编码的过程。

>>> from sklearn.preprocessing import LabelEncoder
>>> enc = LabelEncoder()
>>> y = enc.fit_transform(y)

  创建一个 LabelEncoder 对象 enc,并使用其 fit_transform 方法对目标变量 y 进行标签编码处理。编码后的结果会覆盖原目标变量 y 的值,使得原本的标签被替换为相应的整数编码标签编码常用于将非数字类型的目标变量转换为模型可接受的数字形式,以便进行机器学习任务的训练和预测。


6.5 输入缺失值

  使用 Imputer 对象对数据集中的缺失值进行填充

>>> from sklearn.preprocessing import Imputer
>>> imp = Imputer(missing_values=0, strategy='mean', axis=0)
>>> imp.fit_transform(X_train)

  创建一个 Imputer 对象 imp,并使用其 fit_transform 方法对训练集 X_train 中的缺失值进行填充处理。填充后的结果会覆盖原始的训练集数据 X_train,使得缺失值被替换为相应列的均值Imputer 类常用于在数据预处理阶段处理缺失值,以保证数据集的完整性和准确性


6.6 生成多项式特征

  使用 PolynomialFeatures 对特征进行多项式扩展

>>> from sklearn.preprocessing import PolynomialFeatures
>>> poly = PolynomialFeatures(5)
>>> poly.fit_transform(X)

  创建一个 PolynomialFeatures 对象 poly,并使用其 fit_transform 方法对数据集 X 进行多项式扩展处理。扩展后的结果会包含原始特征的各种次方组合从一次项到最高次数为 5 的项多项式扩展常用于增加模型的复杂度,以捕捉特征之间的非线性关系,从而提升模型的预测能力


七、评估模型性能

7.1 评估模型性能

7.1.1 准确率

  使用 scikit-learn 中的评估器评分法和指标评分函数来评估模型的准确性

>>> knn.score(X_test, y_test)
# 评估器评分法
>>> from sklearn.metrics import accuracy_score
# 指标评分函数
>>> accuracy_score(y_test, y_pred)

  可以使用评估器评分法或指标评分函数来评估模型在测试集上的准确性评估器评分法直接调用模型对象的 score 方法,而指标评分函数则需要传入真实目标变量数据和预测结果数据来计算准确性得分。这些评估方法可以帮助我们 了解模型的性能,并 比较不同模型之间的表现


7.1.2 分类预估评价函数

  使用 scikit-learn 中的 classification_report 函数 来生成分类模型的精确度、召回率、F1指数和支持率等评估指标报告。

>>> from sklearn.metrics import classification_report
# 精确度、召回率、F1分数及支持率
>>> print(classification_report(y_test, y_pred))

  可以使用 classification_report 函数生成分类模型的评估指标报告。该报告会包含每个类别的精确度召回率F1指数支持率等指标,以及加权平均值总平均值。这些指标可以帮助我们评估模型在不同类别上的表现,并提供关于模型性能的详细信息。


7.1.3 混淆矩阵

  使用 scikit-learn 中的 confusion_matrix 函数生成分类模型的混淆矩阵

>>> from sklearn.metrics import confusion_matrix
>>> print(confusion_matrix(y_test, y_pred))

  使用 confusion_matrix 函数生成分类模型的混淆矩阵。混淆矩阵以矩阵的形式展示了模型在各个类别上的分类结果,包括 真正例假正例假负例真负例的数量。这样,我们就可以根据混淆矩阵来评估模型在不同类别上的分类性能,并进一步分析误分类的情况


7.2 回归指标

7.2.1 平均绝对误差

  使用 scikit-learn 中的 mean_absolute_error 函数来计算回归模型的平均绝对误差(Mean Absolute Error)。

>>> from sklearn.metrics import mean_absolute_error 
>>> y_true = [3, -0.5, 2]
>>> mean_absolute_error(y_true, y_pred)

  使用 mean_absolute_error 函数计算回归模型的平均绝对误差。该指标 衡量模型的预测结果与真实值之间的平均偏差程度数值越小表示模型的预测越准确。使用平均绝对误差可以帮助您评估回归模型的性能,并比较不同模型之间的表现。


7.2.2 均方误差

  使用 scikit-learn 中的 mean_squared_error 函数来计算回归模型的均方误差Mean Squared Error)。

>>> from sklearn.metrics import mean_squared_error
>>> mean_squared_error(y_test, y_pred)

  使用 mean_squared_error 函数计算回归模型的均方误差。该指标衡量了模型的预测结果与真实值之间的平均差异程度数值越小表示模型的预测越准确。使用均方误差可以帮助我们评估回归模型的性能,并比较不同模型之间的表现。


7.2.3 R²评分

  使用 scikit-learn 中的 r2_score 函数来计算 回归模型的 R² 分数(R-squared score)。

>>> from sklearn.metrics import r2_score
>>> r2_score(y_true, y_pred)

  通过执行这些代码,可以使用 r2_score 函数计算回归模型的 R² 分数,即确定性系数拟合优度R² 分数的取值范围在 0 到 1 之间,数值越接近 1 表示模型对数据的拟合程度越好,而越接近 0 则表示模型的拟合效果较差。R² 分数可以帮助我们评估回归模型的性能,并与其他模型进行比较。


7.3 群集指标

7.3.1 调整兰德系数

  使用 scikit-learn 中的 adjusted_rand_score 函数来计算聚类算法的调整兰德指数(Adjusted Rand Index)。

>>> from sklearn.metrics import adjusted_rand_score
>>> adjusted_rand_score(y_true, y_pred) 

  使用 adjusted_rand_score 函数计算聚类算法的调整兰德指数。调整兰德指数的取值范围在 -1 到 1 之间数值越接近 1 表示聚类结果与真实标签的一致性越高,而数值越接近 0 表示聚类结果与随机划分的一致性一样,数值越接近 -1 表示聚类结果与真实标签的一致性越低。调整兰德指数可以帮助评估聚类算法的性能,并与其他算法进行比较。


7.3.2 同质性

  使用 scikit-learn 中的 homogeneity_score 函数来计算聚类结果的同质性得分(Homogeneity Score)。

>>> from sklearn.metrics import homogeneity_score
>>> homogeneity_score(y_true, y_pred) 

  使用 homogeneity_score 函数计算聚类结果的同质性得分。同质性得分的取值范围在 0 到 1 之间,数值越接近 1 表示聚类结果中的样本更倾向于同属于一个类别的聚类簇,而数值越接近 0 表示聚类结果的同质性较差,样本分布更分散。同质性得分可以帮助评估聚类算法在保持同类样本集中性方面的性能,并与其他算法进行比较。


7.3.3 V-measure

  使用 scikit-learn 中的 v_measure_score 函数来计算聚类结果的 V-measure 分数

>>> from sklearn.metrics import v_measure_score
>>> v_measure_score(y_true, y_pred) 

  使用 v_measure_score 函数计算聚类结果的 V-measure 分数。V-measure 分数的取值范围在 0 到 1 之间,数值越接近 1 表示聚类结果的同质性和完整性越高,而数值越接近 0 表示聚类结果的质量较差


7.4 交叉验证

  使用 scikit-learn 中的 cross_val_score 函数来进行 交叉验证计算模型的性能评估指标

>>> from sklearn.cross_validation import cross_val_score
>>> print(cross_val_score(knn, X_train, y_train, cv=4))
>>> print(cross_val_score(lr, X, y, cv=2))

  使用 cross_val_score 函数对模型进行交叉验证并计算性能评估指标。交叉验证可以帮助我们更全面地评估模型的性能,并确保评估指标的可靠性。在交叉验证中,输入数据会被分成若干个折(即交叉验证的折数),每一折轮流作为验证集,剩余折作为训练集,用于拟合模型并计算性能评估指标。最终,所有折的性能评估指标会被汇总,得出 模型的平均性能评估指标


八、模型调整

8.1 栅格搜索

  使用 scikit-learn 中的 GridSearchCV 类来进行 网格搜索参数调优

>>> from sklearn.grid_search import GridSearchCV
>>> params = {"n_neighbors": np.arange(1,3), "metric": ["euclidean", "cityblock"]}
>>> grid = GridSearchCV(estimator=knn, param_grid=params)
>>> grid.fit(X_train, y_train)
>>> print(grid.best_score_)
>>> print(grid.best_estimator_.n_neighbors)

  通过执行这些代码,可以使用 GridSearchCV 类对模型的参数空间进行穷举搜索,并找到最佳的参数组合。网格搜索可以帮助我们找到最优的参数设置,从而提高模型的性能。在搜索过程中,将对每一组参数进行交叉验证,并根据性能评估指标选择最佳的参数组合。


8.2 随机参数优化

  使用 scikit-learn 中的 RandomizedSearchCV 类来进行 随机搜索参数调优

>>> from sklearn.grid_search import RandomizedSearchCV
>>> params = {"n_neighbors": range(1,5), "weights": ["uniform", "distance"]}
>>> rsearch = RandomizedSearchCV(estimator=knn, param_distributions=params, cv=4, n_iter=8, random_state=5)
>>> rsearch.fit(X_train, y_train)
>>> print(rsearch.best_score_)

  使用 RandomizedSearchCV 类对模型的参数空间进行随机搜索,并找到最佳的参数组合。随机搜索相比于网格搜索,可以更高效地在大范围的参数空间中寻找最佳参数组合。在搜索过程中,将对每一组参数进行交叉验证,并根据性能评估指标选择最佳的参数组合


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
89 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
1月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
40 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
1月前
|
监控 测试技术 PHP
性能和压力测试
【10月更文挑战第10天】性能和压力测试
111 60
|
1月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
1192 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
PyTorch 算法框架/工具 计算机视觉
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
本文介绍了使用YOLOv4-Tiny进行目标检测的完整流程,包括模型介绍、代码下载、数据集处理、网络训练、预测和评估。
104 2
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
|
19天前
|
编解码 人工智能 自然语言处理
迈向多语言医疗大模型:大规模预训练语料、开源模型与全面基准测试
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据,无需标准化。其核心创新包括任意分辨率编码和动态压缩器模块,适用于从微小图标到长时间视频的多种应用场景。Oryx 在长上下文检索和空间感知数据方面表现出色,并且已开源,为多模态研究提供了强大工具。然而,选择合适的分辨率和压缩率仍需谨慎,以平衡处理效率和识别精度。论文地址:https://www.nature.com/articles/s41467-024-52417-z
41 2
|
1月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
1月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
309 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
84 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
1月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
184 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)

热门文章

最新文章