目录
🐋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,并应用于实际的机器学习任务中。