
Scikit-learn
简介
Python 机器学习库,BSD 许可开源
详细介绍
- 它解决什么:Scikit-Learn(安装包名写作 scikit-learn)是 Python 生态里被引用次数最多的机器学习库之一,官网 https://scikit-learn.org/,采用 BSD 许可开源,装上即可使用。它把分类、回归、聚类、降维这几类传统任务收敛到同一套接口上——换算法只需替换那一行构造器,fit、predict、transform 的调用写法完全不变。
底层建立在 NumPy 的数组结构与 SciPy 的稀疏矩阵之上,Pandas 处理出来的表格也能直接喂进去,因此在数据挖掘和数据分析的日常脚本里出现得极其频繁。
- 装起来:pip install -U scikit-learn 是官方推荐路径;用 conda 管理环境则执行 conda install -c conda-forge scikit-learn,NumPy、SciPy、joblib 会作为依赖一并安装。
用 pip 装之前,建议先确认当前解释器和 NumPy 版本能否匹配。
- 跑通一个模型:库自带 Iris 鸢尾花、Digits 手写数字等内置数据集,省去到处找数据的麻烦;把三行连起来写就是 iris = datasets.load_iris() X = iris.data y = iris.target。换成自己的数据则 pd.read_csv('your_dataset.csv') 读一份 CSV 文件进来,再用 data.drop('target_column', axis=1) 和 data['target_column'] 拆成 X 与 y。
引入 Pandas 主要是为了读表和做清洗。
- 切分与缩放这一步:train_test_split(X, y, test_size=0.2, random_state=42) 得到四份数据,接着 scaler = StandardScaler(),训练集走 scaler.fit_transform(X_train),测试集只能 scaler.transform(X_test)——若在这里重新 fit,测试集的均值方差就泄进了训练流程,得到的分数会偏乐观。
- 训练与评估:model = LogisticRegression() 配上 model.fit(X_train, y_train),predict 得到 y_pred,再用 accuracy = accuracy_score(y_test, y_pred) 拿整体准确率,classification_report(y_test, y_pred) 按类别列出精确率、召回率和 F1。
想打印结果就写 print(f'Accuracy: {accuracy:.2f}')。新样本同样要先过一遍缩放,写成 new_data = np.array([[5.1, 3.5, 1.4, 0.2]]),然后 prediction = model.predict(new_data),print(f'Prediction: {prediction}') 就能看到预测结果。
- 挑模型这件事:cross_val_score 负责交叉验证,GridSearchCV 与 RandomizedSearchCV 负责超参数搜索。GridSearchCV(estimator, param_grid, cv=5) 写好候选字典再 fit,best_params_ 给出最优组合、best_score_ 给出对应的交叉验证分数;候选空间铺得太宽时换 RandomizedSearchCV,用随机采样代替穷举,算力能省一大截。
只想粗估泛化表现则用 cross_val_score(model, X, y, cv=5),五次划分的分数一起返回,比单次留出更能反映稳定性。
- 把步骤接到一块:Pipeline 把缩放、特征选择和估计器打包成单个对象,交叉验证时每一折只在训练部分 fit scaler,天然避开了上面那处泄漏;ColumnTransformer 则允许数值列和类别列走各自的预处理分支。
一个完整脚本的
- import 段落归拢成一行就是:import numpy as np import pandas as pd from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score。
- 算法家底:线性模型与树模型之外,Bagging、Boosting、随机森林这类集成方法齐全;多输出分类、多输出回归以及多标签任务也受支持,同一个模型同时预测多个目标值是可行的。
- 预处理的活:特征缩放、缺失值填补、类别编码、特征选择都有对应工具,不必自己写循环。
- 拿它做什么:垃圾邮件识别、图像分类、疾病诊断属于典型的判别任务;房价、股价、销量的连续值预测归入回归;K 均值等无监督算法常用来做客户分群,PCA 则习惯把高维数据压到二维做散点可视化。
- 边界在哪里:GPU 训练、深度神经网络、超大规模稀疏场景不在它的射程内,这些活更适合交给 PyTorch、XGBoost 或 Spark MLlib;它的主场是中小规模表格数据上的传统建模。
- 上线:落盘写成 import joblib joblib.dump(model, 'model.pkl'),读取时 model = joblib.load('model.pkl'),服务端还原出同一个 model 对象即可对外提供预测。
- 上手资料:官网挂着用户指南、API 参考和大量示例页,每个估计器都有可运行的 demo,遇到参数拿不准时比翻网上那些笔记博客更省时间。