哪些Python案例展示了scikit-learn用法?

wen python案例 3

本文目录导读:

哪些Python案例展示了scikit-learn用法?

  1. 分类任务:鸢尾花数据集 (K近邻)
  2. 回归任务:波士顿房价预测(线性回归)
  3. 聚类任务:客户分群 (K-Means)
  4. 降维与可视化:PCA 主成分分析
  5. 模型选择与交叉验证:SVM + GridSearchCV
  6. 集成学习:随机森林与特征重要性
  7. 管道 (Pipeline) 示例:预处理 + 模型训练
  8. 总结:这些案例覆盖了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的核心用法。

抱歉,评论功能暂时关闭!