Python scikit-learn 【机器学习库】全面讲解

让AI成为我们的得力助手:《用Cursor玩转AI辅助编程——不写代码也能做软件开发》


scikit-learn(简称 sklearn)是 Python 最流行的机器学习库之一,提供简单高效的数据挖掘和数据分析工具。它基于 NumPy、SciPy 和 Matplotlib 构建,广泛应用于工业界和学术界。


核心优势
  • 统一 API 设计:所有模型使用一致的接口(fit()predict()score()
  • 丰富的算法:覆盖分类、回归、聚类、降维等
  • 完善的文档:详细的示例和用户指南
  • BSD 许可证:商业友好

安装

pip install numpy scipy matplotlib scikit-learn

核心功能模块

模块类别 主要功能 代表算法
数据预处理 特征缩放、编码、缺失值处理 StandardScaler, OneHotEncoder
监督学习 分类与回归 SVM, RandomForest, LinearRegression
无监督学习 聚类与降维 KMeans, PCA, DBSCAN
模型选择 交叉验证、超参数调优 GridSearchCV, train_test_split
特征工程 特征提取与选择 SelectKBest, RFECV
评估指标 模型性能评估 accuracy_score, roc_auc_score

工作流程示例

1. 数据加载与拆分
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)
2. 数据预处理
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 注意: 使用相同的scaler
3. 模型训练
from sklearn.svm import SVC

model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train_scaled, y_train)
4. 模型评估
from sklearn.metrics import classification_report

y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))

关键组件详解

1. 数据预处理
  • 特征标准化
    from sklearn.preprocessing import StandardScaler, MinMaxScaler
    
  • 分类特征编码
    from sklearn.preprocessing import OneHotEncoder, LabelEncoder
    
  • 缺失值处理
    from sklearn.impute import SimpleImputer
    imp = SimpleImputer(strategy='mean')
    
2. 监督学习算法
  • 分类
    # 支持向量机
    from sklearn.svm import SVC
    
    # 随机森林
    from sklearn.ensemble import RandomForestClassifier
    
    # K近邻
    from sklearn.neighbors import KNeighborsClassifier
    
  • 回归
    # 线性回归
    from sklearn.linear_model import LinearRegression
    
    # 梯度提升树
    from sklearn.ensemble import GradientBoostingRegressor
    
3. 无监督学习
  • 聚类
    from sklearn.cluster import KMeans
    kmeans = KMeans(n_clusters=3).fit(X)
    
  • 降维
    from sklearn.decomposition import PCA
    pca = PCA(n_components=2).fit_transform(X)
    
4. 模型选择与调优
  • 交叉验证
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(model, X, y, cv=5)
    
  • 网格搜索
    from sklearn.model_selection import GridSearchCV
    
    param_grid = {'C': [0.1, 1, 10], 'gamma': [0.01, 0.1]}
    grid = GridSearchCV(SVC(), param_grid, cv=3)
    grid.fit(X_train, y_train)
    
5. 评估指标
  • 分类accuracy_score, f1_score, roc_auc_score
  • 回归mean_squared_error, r2_score
  • 聚类silhouette_score

高级技巧

1. 特征工程管道
from sklearn.pipeline import make_pipeline
from sklearn.feature_selection import SelectKBest

pipeline = make_pipeline(
    StandardScaler(),
    SelectKBest(k=10),
    RandomForestClassifier(n_estimators=100)
)
2. 自定义评估器
from sklearn.base import BaseEstimator, TransformerMixin

class CustomScaler(BaseEstimator, TransformerMixin):
    def fit(self, X, y=None):
        self.mean = X.mean(axis=0)
        return self
        
    def transform(self, X):
        return X - self.mean
3. 类别不平衡处理
# 使用带权重的分类器
model = SVC(class_weight='balanced')

# 使用SMOTE过采样
from imblearn.over_sampling import SMOTE
smote = SMOTE()
X_res, y_res = smote.fit_resample(X_train, y_train)

性能优化技巧

  1. 使用joblib并行处理
    model = RandomForestClassifier(n_jobs=-1)  # 使用所有CPU核心
    
  2. 增量学习(大数据集):
    from sklearn.linear_model import SGDClassifier
    model = SGDClassifier()
    for chunk in pd.read_csv('large.csv', chunksize=1000):
        model.partial_fit(chunk)
    
  3. 特征降维:在训练前使用PCA减少特征维度

最佳实践

  1. 始终拆分训练/测试集:防止数据泄露
  2. 使用管道:确保预处理步骤包含在交叉验证中
  3. 特征缩放:对距离敏感的算法(SVM、KNN)至关重要
  4. 超参数调优:优先使用RandomizedSearchCV处理高维参数空间
  5. 特征重要性分析
    importances = model.feature_importances_
    

常见陷阱

  1. 测试集参与训练:确保测试集不用于任何预处理
  2. 忽略类别不平衡:导致模型偏向多数类
  3. 过度依赖默认参数:调整参数可显著提升性能
  4. 特征工程不足:模型效果70%取决于特征质量

学习资源

  1. 官方文档
  2. 《Hands-On Machine Learning with Scikit-Learn》
  3. Kaggle 机器学习课程
  4. Scikit-learn 官方示例库

通过掌握 scikit-learn,你可以高效实现从数据预处理到模型部署的完整机器学习流程。建议从官方示例开始实践,逐步深入复杂项目。

你可能感兴趣的:(Python scikit-learn 【机器学习库】全面讲解)