当前位置:   article > 正文

【python】sklearn基础教程及示例

【python】sklearn基础教程及示例

【python】sklearn基础教程及示例


Scikit-learn(简称sklearn)是一个非常流行的Python机器学习库,提供了许多常用的机器学习算法和工具。以下是一个基础教程的概述:


 1. 安装scikit-learn


首先,确保你已经安装了Python和pip,然后使用以下命令安装scikit-learn:

pip install -U scikit-learn

2. 导入库

在你的Python脚本或Jupyter Notebook中,首先导入scikit-learn库:

import sklearn

3. 加载数据

你可以加载各种数据集,包括样本数据集和真实世界数据集。例如,加载经典的鸢尾花数据集:

  1. from sklearn.datasets import load_iris
  2. iris = load_iris()
  3. X = iris.data # 特征矩阵
  4. y = iris.target # 目标向量

4. 数据预处理

在应用机器学习算法之前,通常需要进行一些数据预处理,例如特征缩放、特征选择、数据清洗等。以下是一些常用的数据预处理方法:

  1. from sklearn.preprocessing import StandardScaler
  2. scaler = StandardScaler()
  3. X_scaled = scaler.fit_transform(X)

5. 数据拆分

将数据集拆分为训练集和测试集:

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

6. 建立模型

使用各种机器学习算法来建立模型,例如逻辑回归:

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

7. 模型评估

在训练模型之后,评估模型的性能,例如使用准确度评估:

  1. from sklearn.metrics import accuracy_score
  2. y_pred = model.predict(X_test)
  3. accuracy = accuracy_score(y_test, y_pred)
  4. print(f"Accuracy: {accuracy}")

8. 交叉验证

使用交叉验证来评估模型的稳定性和泛化能力:

  1. from sklearn.model_selection import cross_validate
  2. result = cross_validate(model, X, y, cv=5)
  3. print(result['test_score'])

sklearn示例

1.简单例子:鸢尾花分类

这是一个经典的机器学习任务,用于分类鸢尾花的种类。

load_iris 是一个经典的机器学习数据集,通常用于分类和聚类任务。这个数据集包含了三种不同种类的鸢尾花(Iris Setosa、Iris Versicolour 和 Iris Virginica)的信息,每种鸢尾花有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。

具体来说,load_iris 数据集包含以下内容:

  • 150个样本:每种鸢尾花各50个样本。
  • 4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。
  • 目标标签:每个样本的目标类别标签,分别为0(Setosa)、1(Versicolour)和2(Virginica)。
  • StandardScaler 是 scikit-learn 库中的一个类,用于对数据进行标准化处理。标准化的目的是将数据的特征缩放到相同的尺度,通常是均值为0,标准差为1。这对于许多机器学习算法来说是非常重要的,特别是那些基于距离的算法(如K-近邻、支持向量机等)和需要计算协方差矩阵的算法(如PCA、线性回归等)。

  1. # 导入必要的库
  2. from sklearn.datasets import load_iris
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.preprocessing import StandardScaler
  5. from sklearn.linear_model import LogisticRegression
  6. from sklearn.metrics import accuracy_score
  7. # 加载数据集
  8. iris = load_iris()
  9. X = iris.data
  10. y = iris.target
  11. # 数据预处理
  12. scaler = StandardScaler()
  13. X_scaled = scaler.fit_transform(X)
  14. # 拆分数据集
  15. X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
  16. # 建立和训练模型
  17. model = LogisticRegression()
  18. model.fit(X_train, y_train)
  19. # 预测和评估
  20. y_pred = model.predict(X_test)
  21. accuracy = accuracy_score(y_test, y_pred)
  22. print(f"Accuracy: {accuracy}")

2.复杂例子:手写数字识别

这个例子使用手写数字数据集,并应用支持向量机(SVM)进行分类。

load_digits 是 scikit-learn 提供的一个经典数据集,用于手写数字识别任务。这个数据集包含了 0 到 9 共 10 个数字的手写图像,每个图像是一个 8x8 的灰度图像。

  • 数据集内容 样本数量:1797 个手写数字图像。
  • 特征维度:每个图像有 64 个特征(8x8 像素)。
  • 特征值:每个特征值是一个整数,范围从 0 到 16,表示像素的灰度值。
  • 目标标签:每个样本对应一个目标标签,表示数字 0 到 9。

  1. # 导入必要的库
  2. from sklearn.datasets import load_digits
  3. from sklearn.model_selection import train_test_split, GridSearchCV
  4. from sklearn.preprocessing import StandardScaler
  5. from sklearn.svm import SVC
  6. from sklearn.metrics import classification_report
  7. # 加载数据集
  8. digits = load_digits()
  9. X = digits.data
  10. y = digits.target
  11. # 数据预处理
  12. scaler = StandardScaler()
  13. X_scaled = scaler.fit_transform(X)
  14. # 拆分数据集
  15. X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
  16. # 使用网格搜索进行超参数调优
  17. param_grid = {'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001]}
  18. grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
  19. grid.fit(X_train, y_train)
  20. # 最佳参数和模型评估
  21. print(f"Best Parameters: {grid.best_params_}")
  22. y_pred = grid.predict(X_test)
  23. print(classification_report(y_test, y_pred))

在这个复杂的例子中,我们使用了网格搜索(GridSearchCV)来找到支持向量机(SVM)的最佳超参数,并使用分类报告(classification_report)来评估模型的性能。

  • param_grid:这是一个字典,定义了要搜索的参数范围。在这个例子中,我们要调整两个参数:
    • C:正则化参数,控制模型的复杂度。较小的 C 值会使模型更简单,但可能欠拟合;较大的 C 值会使模型更复杂,但可能过拟合。
    • gamma:核函数系数,控制单个训练样本的影响范围。较大的 gamma 值会使模型更复杂,但可能过拟合;较小的 gamma 值会使模型更简单,但可能欠拟合。
  • GridSearchCV:这是 scikit-learn 提供的一个工具,用于通过交叉验证来搜索最佳参数组合。
    • SVC():支持向量机分类器。
    • param_grid:要搜索的参数网格。
    • refit=True:在找到最佳参数组合后,使用整个训练集重新训练模型。
    • verbose=2:设置详细程度,输出更多的搜索过程信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/887022
推荐阅读
相关标签
  

闽ICP备14008679号