Scikit-Learn 基础教程

目录

🐋Scikit-Learn 基础教程

🐋Scikit-Learn 简介

🐋 数据预处理

🦈数据集导入

🦈数据清洗

🦈特征选择

🦈特征标准化

🐋 模型选择

🦈分类模型

🦈回归模型

🦈聚类模型

🐋模型训练与评估

🦈交叉验证

🦈超参数调优

🐋 模型保存与加载

🐋 实战案例

🦈分类问题:手写数字识别

🦈回归问题:波士顿房价预测

🦈聚类问题:鸢尾花数据集聚类分析

🐋总结


🐋Scikit-Learn 基础教程

  • Scikit-Learn(简称 sklearn)是一个基于 Python 的机器学习库。它构建在 NumPy、SciPy 和 Matplotlib 之上,为各种机器学习任务提供了简单而高效的工具。本文将详细解析 Scikit-Learn 的基础知识,并通过具体示例来展示其应用。

🐋Scikit-Learn 简介

  • Scikit-Learn 是一个开源的机器学习库,由 David Cournapeau 在 2007 年创建,并在 2010 年由 INRIA 进行发布。它以其简单易用、丰富的功能和良好的文档支持,成为了机器学习领域的重要工具。

Scikit-Learn 提供了以下主要功能:

  • 数据预处理:包括特征提取、归一化和降维等。
  • 模型选择:支持多种分类、回归和聚类算法。
  • 模型评估:提供了丰富的模型评估指标和交叉验证方法。
  • 模型调优:支持网格搜索和随机搜索等超参数调优方法。
  • 模型持久化:支持模型的保存和加载。

🐋 数据预处理

  • 数据预处理是机器学习流程中的重要环节,旨在将原始数据转换为适合模型训练的数据形式。Scikit-Learn 提供了一系列工具来简化这一过程。

🦈数据集导入

  • Scikit-Learn 提供了一些常用数据集,可以通过 datasets 模块直接加载。此外,还可以从 CSV、Excel 等文件中导入数据。
from sklearn import datasets

# 加载鸢尾花数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target

🦈数据清洗

  • 数据清洗包括处理缺失值、去除重复数据等。可以使用 pandas 库进行数据清洗。
import pandas as pd
from sklearn.impute import SimpleImputer

# 加载数据
data = pd.read_csv('data.csv')

# 填补缺失值
imputer = SimpleImputer(strategy='mean')
data_imputed = imputer.fit_transform(data)

🦈特征选择

  • 特征选择是从大量特征中选出对模型训练最有用的特征,Scikit-Learn 提供了多种特征选择方法,如基于方差、相关系数等。
from sklearn.feature_selection import SelectKBest, f_classif

# 选择前 3 个最佳特征
selector = SelectKBest(score_func=f_classif, k=3)
X_new = selector.fit_transform(X, y)

🦈特征标准化

  • 特征标准化是将数据缩放到相同尺度,以提高模型训练效果。常用的标准化方法有 MinMaxScaler、StandardScaler 等。
from sklearn.preprocessing import StandardScaler

# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

🐋 模型选择

  • Scikit-Learn 提供了多种机器学习模型,包括分类、回归和聚类模型。选择适合的模型是机器学习的关键步骤。

🦈分类模型

  • 分类模型用于解决离散标签的预测问题。常用的分类模型有逻辑回归、支持向量机、决策树、随机森林等。
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

🦈回归模型

  • 回归模型用于预测连续值。常用的回归模型有线性回归、岭回归、Lasso 回归等。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 加载波士顿房价数据集
boston = datasets.load_boston()
X, y = boston.data, boston.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

🦈聚类模型

  • 聚类模型用于将数据分组,常用的聚类模型有 KMeans、DBSCAN、层次聚类等。
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 训练 KMeans 模型
model = KMeans(n_clusters=3, random_state=42)
model.fit(X)

# 获取聚类结果
labels = model.labels_

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.show()

🐋模型训练与评估

🦈交叉验证

  • 交叉验证是一种评估模型性能的技术,通过多次训练和测试来获得更稳定的评估结果。Scikit-Learn 提供了 cross_val_score 函数进行交叉验证。
from sklearn.model_selection import cross_val_score

# 进行 5 折交叉验证
scores = cross_val_score(model, X, y, cv=5)
print(f"Cross-validation scores: {scores}")
print(f"Mean score: {scores.mean()}")

🦈超参数调优

  • 超参数调优是通过调整模型的超参数来提升模型性能。Scikit-Learn 提供了网格搜索和随机搜索方法。
from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {
    'C': [0.1, 1, 10, 100],
    'solver': ['lbfgs', 'liblinear']
}

# 进行网格搜索
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 最佳参数
print(f"Best parameters: {grid_search.best_params_}")

🐋 模型保存与加载

  • Scikit-Learn 提供了简单的模型保存和加载方法,通过 joblib 库实现。
import joblib

# 保存模型
joblib.dump(model, 'model.pkl')

# 加载模型
loaded_model = joblib.load('model.pkl')

🐋 实战案例

🦈分类问题:手写数字识别

  • 手写数字识别是经典的分类问题,可以使用 MNIST 数据集进行演示。
from sklearn.datasets import load_digits
from sklearn.neighbors import KNeighborsClassifier

# 加载手写数字数据集
digits = load_digits()
X, y = digits.data, digits.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练 KNN 分类器
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

🦈回归问题:波士顿房价预测

  • 波士顿房价预测是经典的回归问题,使用线性回归模型进行演示。
# 已在上文演示

🦈聚类问题:鸢尾花数据集聚类分析

  • 使用 KMeans 对鸢尾花数据集进行聚类分析。
# 已在上文演示

🐋总结

  • 通过本文的介绍,我们了解了 Scikit-Learn 的基本功能和使用方法。Scikit-Learn 提供了从数据预处理、模型选择、模型训练到模型评估和调优的全流程支持,极大地简化了机器学习的实现过程。希望通过本文的学习,读者能更好地掌握 Scikit-Learn,并应用于实际的机器学习任务中。

相关推荐

  1. Scikit-learn 基础教程:机器学习的初步指南

    2024-06-06 00:10:04       11 阅读
  2. Scikit-Learn 中级教程——特征缩放

    2024-06-06 00:10:04       29 阅读
  3. Scikit-Learn 中级教程——学习曲线

    2024-06-06 00:10:04       35 阅读
  4. Scikit-Learn 中级教程——模型融合

    2024-06-06 00:10:04       34 阅读
  5. Scikit-Learn 高级教程——高级特征工程

    2024-06-06 00:10:04       30 阅读
  6. Scikit-Learn 高级教程——高级模型

    2024-06-06 00:10:04       25 阅读
  7. scikit-learn保姆级入门教程

    2024-06-06 00:10:04       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 00:10:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 00:10:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 00:10:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 00:10:04       18 阅读

热门阅读

  1. 事务与并发控制

    2024-06-06 00:10:04       8 阅读
  2. 恶意代码详解

    2024-06-06 00:10:04       8 阅读
  3. python 比较 mysql 表结构差异

    2024-06-06 00:10:04       8 阅读
  4. 探秘AI艺术:揭开Midjourney绘画的神秘面纱

    2024-06-06 00:10:04       9 阅读
  5. Tomcat启动闪退问题解决方法

    2024-06-06 00:10:04       9 阅读
  6. Oracle 表数据段收缩示例

    2024-06-06 00:10:04       8 阅读
  7. CMakeLists.txt和Package.xml

    2024-06-06 00:10:04       8 阅读