使用 Scikit-learn 的第一步是正确安装。官方推荐通过 Python 包管理器 pip 安装:pip install -U scikit-learn。对于 Anaconda 用户,可以使用 conda install scikit-learn。安装完成后,在 Python 脚本或 Jupyter Notebook 中通过 import sklearn 导入。建议在虚拟环境中进行,避免版本冲突。Scikit-learn 依赖 NumPy、SciPy 和 joblib,这些依赖会在安装时自动处理。验证安装是否成功,可以运行 sklearn.show_versions() 查看版本与依赖列表。
Scikit-learn 内置了多个经典数据集,方便快速上手。例如 from sklearn.datasets import load_iris 可以加载鸢尾花数据集。数据通常以字典形式返回,包含 data(特征矩阵)、target(标签)、feature_names 和 target_names。对于外部数据,建议使用 Pandas 读取,然后转换为 NumPy 数组。预处理是使用 Scikit-learn 的核心步骤之一,常用工具集中在 sklearn.preprocessing 模块:StandardScaler 用于标准化(减去均值除以标准差),MinMaxScaler 用于归一化到给定区间。处理分类特征时,OneHotEncoder 可以将类别变量转换为二进制向量。注意:预处理器的 fit 和 transform 方法分离,先对训练集 fit,再用同一参数转换训练集和测试集,避免数据泄露。
Scikit-learn 提供了统一的 API 接口:所有模型(估计器)都实现了 fit(X, y) 方法。监督学习中最常用的模型包括线性回归(LinearRegression)、逻辑回归(LogisticRegression)、支持向量机(SVC)、决策树(DecisionTreeClassifier)和随机森林(RandomForestClassifier)。无监督学习则有 KMeans、DBSCAN、PCA 等。以分类任务为例:model = RandomForestClassifier(n_estimators=100); model.fit(X_train, y_train)。训练后,使用 model.predict(X_test) 得到预测结果,或 model.predict_proba(X_test) 获取概率估计。注意大多数模型都有超参数(如 n_estimators、max_depth),默认值在基准场景下表现尚可,但实际应用中需要调优。
评估模型性能需要选择合适的指标。Scikit-learn 的 metrics 模块提供了完整工具:分类任务常用 accuracy_score、precision_score、recall_score、f1_score,以及 confusion_matrix 和 classification_report。回归任务使用 mean_squared_error、r2_score 等。交叉验证是防止过拟合的重要手段:from sklearn.model_selection import cross_val_score,例如 cross_val_score(model, X, y, cv=5, scoring='accuracy') 返回五折交叉验证的准确率数组。此外,train_test_split 用于划分训练集和测试集,建议设置 random_state 保证结果可复现。对于不平衡数据集,StratifiedKFold 可以保持每折中类别比例。
手动调超参数效率低,Scikit-learn 提供了 GridSearchCV 和 RandomizedSearchCV 实现自动化搜索。以网格搜索为例:首先定义参数网格字典,如 param_grid = {'n_estimators': [50, 100], 'max_depth': [3, 5]},然后 grid = GridSearchCV(estimator=RandomForestClassifier(), param_grid=param_grid, cv=5)。调用 grid.fit(X_train, y_train) 会遍历所有组合,通过交叉验证选出最佳参数。最佳模型可通过 grid.best_estimator_ 获取,最佳分数通过 grid.best_score_ 查看。随机搜索在参数空间较大时更高效,其搜索次数由 n_iter 控制。注意:调优时应在训练集内进行交叉验证,避免使用测试集信息。
实际工作流通常包含多个步骤,如预处理、降维、分类。Scikit-learn 的 Pipeline 可以将这些步骤串联成一个整体,保证交叉验证中每一步都独立执行,避免数据泄露。构建方式:from sklearn.pipeline import Pipeline; pipe = Pipeline([('scaler', StandardScaler()), ('pca', PCA(n_components=2)), ('clf', LogisticRegression())])。然后可以像普通模型一样调用 pipe.fit(X_train, y_train)。管道也可以配合 GridSearchCV 使用,参数名需要加上步骤名前缀,例如 param_grid = {'clf__C': [0.1, 1.0]}。管道使得代码更简洁,且便于部署。
训练好的模型需要保存到磁盘以便后续预测。Scikit-learn 推荐使用 joblib 进行持久化:from joblib import dump, load; dump(model, 'model.joblib'),加载时 model = load('model.joblib')。对于包含管道的模型同样适用。注意版本兼容性:模型文件最好在同一版本的 Scikit-learn 中加载。如果需要在生产环境中快速预测,可以结合 NumPy 数组的格式化输出,或者将模型打包为 ONNX 格式。Scikit-learn 本身不提供服务化部署,但可以与 Flask、FastAPI 等框架集成,通过 REST API 接受特征输入并返回预测结果。
使用过程中常见的错误包括:特征矩阵包含缺失值(Scikit-learn 无法处理 NaN,需先填充或删除)、分类特征未编码(需使用 OneHotEncoder 或 LabelEncoder)、维度不匹配(训练时特征数必须与预测时一致)。可以通过 model.get_params() 查看当前参数,利用 set_params 动态调整。调试时,使用小样本数据验证管道是否正常,启用 verbose 参数输出日志。官方文档的示例代码和 API 参考是解决具体问题的最佳资源,每个类和函数都有详细参数说明和示例。