本文目录导读:

- 分类任务:鸢尾花数据集 (K近邻)
- 回归任务:波士顿房价预测(线性回归)
- 聚类任务:客户分群 (K-Means)
- 降维与可视化:PCA 主成分分析
- 模型选择与交叉验证:SVM + GridSearchCV
- 集成学习:随机森林与特征重要性
- 管道 (Pipeline) 示例:预处理 + 模型训练
- 总结:这些案例覆盖了sklearn的哪些模块?
分类任务:鸢尾花数据集 (K近邻)
最经典的入门案例,使用KNN对鸢尾花进行分类。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 1. 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 2. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 3. 创建并训练模型
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# 4. 预测并评估
y_pred = knn.predict(X_test)
print(f"准确率: {accuracy_score(y_test, y_pred):.2f}") # 通常输出 0.98 左右
学到的核心功能: datasets, train_test_split, KNeighborsClassifier, accuracy_score。
回归任务:波士顿房价预测(线性回归)
注:波士顿房价数据集在较新版本sklearn中已移除,可用fetch_california_housing代替。
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 加载数据(加州房价)
housing = fetch_california_housing()
X, y = housing.data, housing.target
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练线性回归模型
lr = LinearRegression()
lr.fit(X_train, y_train)
# 预测
y_pred = lr.predict(X_test)
# 评估
print(f"均方误差 (MSE): {mean_squared_error(y_test, y_pred):.2f}")
print(f"R² 分数: {r2_score(y_test, y_pred):.2f}") # 通常约 0.6 左右
学到的核心功能: LinearRegression, mean_squared_error, r2_score。
聚类任务:客户分群 (K-Means)
使用K-Means对生成的随机数据或真实数据集进行无监督聚类。
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 生成聚类数据
X, y_true = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=0)
# 创建KMeans模型(假设已知k=4)
kmeans = KMeans(n_clusters=4, n_init=10, random_state=0)
y_kmeans = kmeans.fit_predict(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
c='red', s=200, alpha=0.8, marker='X')"K-Means 聚类结果")
plt.show()
学到的核心功能: make_blobs, KMeans, fit_predict, cluster_centers_。
降维与可视化:PCA 主成分分析
对高维数据进行降维,便于可视化或特征压缩。
from sklearn.decomposition import PCA
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
# 加载手写数字数据集 (64维)
digits = load_digits()
X, y = digits.data, digits.target
# PCA降维到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 可视化2维散点图
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', alpha=0.7)
plt.colorbar()
plt.xlabel("第一主成分")
plt.ylabel("第二主成分")"手写数字的PCA降维可视化")
plt.show()
print(f"保留的方差比例: {pca.explained_variance_ratio_.sum():.2f}") # 通常约0.28左右
学到的核心功能: PCA, fit_transform, explained_variance_ratio_。
模型选择与交叉验证:SVM + GridSearchCV
使用网格搜索自动寻找SVM的最佳超参数,并通过交叉验证评估。
from sklearn.datasets import load_iris
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report
# 加载数据
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 定义参数网格
param_grid = {
'C': [0.1, 1, 10],
'kernel': ['rbf', 'linear'],
'gamma': ['scale', 'auto']
}
# 创建网格搜索对象 (使用3折交叉验证)
svc = SVC(random_state=0)
grid_search = GridSearchCV(svc, param_grid, cv=3, scoring='accuracy', n_jobs=-1)
grid_search.fit(X_train, y_train)
# 输出最佳参数和分数
print(f"最佳参数: {grid_search.best_params_}")
print(f"最佳交叉验证准确率: {grid_search.best_score_:.2f}")
# 在测试集上评估
y_pred = grid_search.best_estimator_.predict(X_test)
print("\n测试集分类报告:\n", classification_report(y_test, y_pred))
学到的核心功能: GridSearchCV, SVC, classification_report,以及交叉验证思想。
集成学习:随机森林与特征重要性
展示随机森林的用法,并可视化特征的重要性排序。
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
# 加载乳腺癌数据集
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练随机森林
rf = RandomForestClassifier(n_estimators=100, random_state=0)
rf.fit(X_train, y_train)
# 特征重要性
importances = rf.feature_importances_
indices = np.argsort(importances)[::-1] # 从大到小排序
# 打印前5个最重要的特征
print("前5个最重要的特征:")
for i in range(5):
print(f"{i+1}. {cancer.feature_names[indices[i]]} ({importances[indices[i]]:.3f})")
# 画出前10个重要特征
plt.figure(figsize=(10,6))
plt.barh(range(10), importances[indices[:10]][::-1])
plt.yticks(range(10), [cancer.feature_names[i] for i in indices[:10]][::-1])
plt.xlabel("特征重要度")"随机森林 - 特征重要性排序 (前10)")
plt.show()
学到的核心功能: RandomForestClassifier, feature_importances_。
管道 (Pipeline) 示例:预处理 + 模型训练
使用Pipeline将数据标准化、PCA降维和逻辑回归组合成一个整体,避免数据泄露。
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 准备数据
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建管道
pipe = Pipeline([
('scaler', StandardScaler()),
('pca', PCA(n_components=20)),
('clf', LogisticRegression(max_iter=1000))
])
# 训练管道 (整个流程自动执行)
pipe.fit(X_train, y_train)
# 预测与评估
y_pred = pipe.predict(X_test)
print(f"Pipeline准确率: {accuracy_score(y_test, y_pred):.2f}")
学到的核心功能: Pipeline, StandardScaler, 组合多个步骤。
这些案例覆盖了sklearn的哪些模块?
| 案例 | 主要模块 | 任务类型 |
|---|---|---|
| 鸢尾花KNN | neighbors, model_selection, metrics |
分类 |
| 加州房价回归 | linear_model, metrics |
回归 |
| K-Means聚类 | cluster, datasets (make_blobs) |
聚类 |
| PCA降维 | decomposition |
降维/可视化 |
| SVM+GridSearch | svm, model_selection |
模型选择 |
| 随机森林特征重要性 | ensemble |
集成学习/解释性 |
| Pipeline管道 | pipeline, preprocessing |
流程组合/数据预处理 |
这些代码可以直接复制运行,帮你快速上手scikit-learn的核心用法。