Scikit-learn 学习思维导图
说明
-
数据预处理:包括数据缩放、缺失值处理和类别编码等。
-
模型选择:通过交叉验证、网格搜索和随机搜索选择最佳模型。
-
监督学习:涵盖线性模型、决策树、支持向量机和集成方法。
-
无监督学习:包括聚类、降维和密度估计。
-
模型评估:使用准确率、混淆矩阵和ROC曲线评估模型性能。
-
特征工程:涉及特征选择、特征提取和特征构造。
-
数据预处理:
- 数据缩放
- StandardScaler: 标准化(z-score标准化),将特征转换为均值为0,方差为1的分布
- 适用场景:特征分布不同量级,对异常值敏感
- 优点:保持异常值的影响,可用于有监督学习
- 缺点:受异常值影响较大
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X)
- MinMaxScaler: 归一化,将特征缩放到[0,1]区间
- 适用场景:特征分布相对集中,对异常值不敏感
- 优点:保持零值,压缩所有特征到相同尺度
- 缺点:不能处理新数据中超出范围的值
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X)
- StandardScaler: 标准化(z-score标准化),将特征转换为均值为0,方差为1的分布
- 缺失值处理
- SimpleImputer: 使用均值、中位数或常数填充缺失值
- 适用场景:数据缺失随机,比例不高
- 优点:实现简单,计算快速
- 缺点:可能引入偏差
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='mean') X_imputed = imputer.fit_transform(X)
- IterativeImputer: 使用其他特征预测缺失值
- 适用场景:特征间存在相关性
- 优点:考虑特征关系,填充更准确
- 缺点:计算复杂,耗时较长
- SimpleImputer: 使用均值、中位数或常数填充缺失值
- 类别编码
- LabelEncoder: 将类别转换为整数编码
- 适用场景:标签编码
- 优点:简单直观
- 缺点:产生序数关系
- OneHotEncoder: 独热编码
- 适用场景:类别特征,无序性
- 优点:不引入序数关系
- 缺点:产生稀疏矩阵,维度灾难
- LabelEncoder: 将类别转换为整数编码
- 数据缩放
完整示例:
-
模型选择:
- 交叉验证 (cross_val_score)
- 适用场景:评估模型泛化性能
- 优点:减少过拟合风险,结果更可靠
- 缺点:计算开销大
from sklearn.model_selection import cross_val_score scores = cross_val_score(model, X, y, cv=5) print(f"交叉验证分数: {scores.mean():.3f} (+/- {scores.std() * 2:.3f})")
- 网格搜索 (GridSearchCV)
- 适用场景:穷举超参数组合
- 优点:可找到最优参数组合
- 缺点:计算量大,耗时长
from sklearn.model_selection import GridSearchCV param_grid = {'max_depth': [3,5,7], 'min_samples_split': [2,3,4]} grid_search = GridSearchCV(model, param_grid, cv=5) grid_search.fit(X, y) print(f"最佳参数: {grid_search.best_params_}")
- 交叉验证 (cross_val_score)
-
监督学习:
- 线性回归 (LinearRegression)
- 适用场景:特征与目标呈线性关系
- 优点:模型简单,可解释性强
- 缺点:无法处理非线性关系
from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X, y) y_pred = model.predict(X_test)
- 决策树 (DecisionTreeClassifier)
- 适用场景:分类问题,特征重要性分析
- 优点:易于理解,可处理非线性关系
- 缺点:容易过拟合
from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier(max_depth=3) model.fit(X, y)
- 线性回归 (LinearRegression)
-
无监督学习:
- K均值聚类 (KMeans)
- 适用场景:数据分组,客户细分
- 优点:简单高效
- 缺点:需预先指定簇数
from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3) clusters = kmeans.fit_predict(X)
- 主成分分析 (PCA)
- 适用场景:降维,特征提取
- 优点:可降低维度,保留主要信息
- 缺点:特征不易解释
from sklearn.decomposition import PCA pca = PCA(n_components=2) X_reduced = pca.fit_transform(X)
- K均值聚类 (KMeans)
-
模型评估:
- 分类报告 (classification_report)
- 适用场景:分类模型评估
- 优点:全面的评估指标
- 缺点:需要真实标签
from sklearn.metrics import classification_report print(classification_report(y_true, y_pred))
- ROC曲线 (roc_curve)
- 适用场景:二分类模型评估
- 优点:可视化模型性能
- 缺点:仅适用于二分类
from sklearn.metrics import roc_curve, auc fpr, tpr, _ = roc_curve(y_true, y_pred_proba) roc_auc = auc(fpr, tpr)
- 分类报告 (classification_report)
-
特征工程:
- 特征选择 (SelectKBest)
- 适用场景:降维,去除无关特征
- 优点:减少过拟合,提高效率
- 缺点:可能丢失有用信息
from sklearn.feature_selection import SelectKBest, f_classif selector = SelectKBest(f_classif, k=5) X_selected = selector.fit_transform(X, y)
- 多项式特征 (PolynomialFeatures)
- 适用场景:非线性特征构造
- 优点:捕捉非线性关系
- 缺点:特征数量增长快
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) X_poly = poly.fit_transform(X)
- 特征选择 (SelectKBest)