Sklearn 教程(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在当今数据驱动的时代,机器学习已成为编程开发者的一项核心技能。Scikit-learn(简称Sklearn)作为 Python 生态中最流行 的机器学习库,凭借其简洁的 API 设计和丰富的算法实现,成为入门与进阶开发者的首选工具。无论你是想预测房价、分类图像,还是构建推荐系统,Sklearn 都能提供一站式解决方案。本文将以循序渐进的方式,结合实际案例,带您系统掌握 Sklearn 的核心功能与应用场景。


安装与环境准备

安装方法

在开始之前,确保已安装 Python 环境。Sklearn 可通过 pip 直接安装:

pip install scikit-learn  

此外,还需安装 numpypandas 等数据处理库,以及 matplotlibseaborn 用于可视化。

第一个 Sklearn 程序

编写简单的线性回归代码,感受 Sklearn 的基础流程:

from sklearn.datasets import make_regression  
from sklearn.linear_model import LinearRegression  

X, y = make_regression(n_samples=100, n_features=1, noise=0.1)  

model = LinearRegression()  
model.fit(X, y)  

print("预测结果:", model.predict([[0.5]]))  

这段代码展示了 Sklearn 的核心步骤:数据准备 → 模型选择 → 训练 → 预测。


数据预处理基础

特征缩放:标准化与归一化

问题场景:假设你要烤蛋糕,面粉的单位是克(0-500),鸡蛋数量是颗(1-3),若直接混合,面粉的量会“压倒”鸡蛋的影响。机器学习模型同样需要统一数据尺度。

解决方案

  • 标准化(Standardization):将数据转换为均值为 0,方差为 1 的分布。适用于大多数算法(如 SVM、逻辑回归)。
  • 归一化(Normalization):将数据缩放到 [0,1] 范围内。适用于距离敏感的算法(如 KNN)。

代码实现

from sklearn.preprocessing import StandardScaler, MinMaxScaler  

scaler = StandardScaler()  
X_scaled = scaler.fit_transform(X)  

normalizer = MinMaxScaler()  
X_normalized = normalizer.fit_transform(X)  

缺失值处理

比喻:缺失值如同食谱中缺少关键材料,需通过“替换”或“删除”来补救。Sklearn 提供 SimpleImputer 类:

from sklearn.impute import SimpleImputer  

imputer = SimpleImputer(strategy='mean')  
X_imputed = imputer.fit_transform(X)  

imputer_cat = SimpleImputer(strategy='most_frequent')  
X_cat_imputed = imputer_cat.fit_transform(X_categorical)  

类别特征编码

问题:机器学习模型无法直接处理“颜色”、“城市”等文本特征。需将类别转换为数值:

  • Label Encoding:将类别映射为连续整数(如“红=0,绿=1”)。
  • One-Hot Encoding:将类别转换为二进制向量(如“红=[1,0],绿=[0,1]”)。

代码示例

from sklearn.preprocessing import LabelEncoder, OneHotEncoder  

encoder = LabelEncoder()  
y_encoded = encoder.fit_transform(y_categorical)  

ohe = OneHotEncoder()  
X_encoded = ohe.fit_transform(X_categorical).toarray()  

算法选择与模型训练

监督学习:线性回归与分类模型

线性回归(Linear Regression)

原理:寻找最佳拟合直线,公式为 ( y = \beta_0 + \beta_1 x )。
案例:预测房价与面积的关系:

from sklearn.datasets import load_boston  
from sklearn.model_selection import train_test_split  

boston = load_boston()  
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2)  

model = LinearRegression()  
model.fit(X_train, y_train)  
print("系数:", model.coef_)  

分类模型:逻辑回归与支持向量机(SVM)

逻辑回归:通过 Sigmoid 函数将输出限制在 [0,1],适用于二分类或多分类:

from sklearn.linear_model import LogisticRegression  

model = LogisticRegression(max_iter=200)  
model.fit(X_train, y_train)  

SVM:通过寻找最大间隔超平面实现分类:

from sklearn.svm import SVC  

svm_model = SVC(kernel='rbf')  
svm_model.fit(X_train, y_train)  

无监督学习:聚类与降维

K-Means 聚类

场景:将客户分为不同群体,无需先验标签。

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)  

模型评估与调优

常用评估指标

任务类型指标适用场景
回归均方误差(MSE)预测值与真实值的平方差均值
R² 分数解释方差占比,1 为最佳
分类准确率(Accuracy)总体预测正确率
精确率(Precision)正类预测中实际正类的比例
召回率(Recall)实际正类中被正确预测的比例
F1 分数精确率与召回率的调和平均数

交叉验证与网格搜索

交叉验证:避免因数据划分导致的过拟合,常用 KFoldStratifiedKFold

from sklearn.model_selection import cross_val_score  

scores = cross_val_score(model, X, y, cv=5)  
print("交叉验证准确率:", scores.mean())  

网格搜索(Grid Search):自动寻找最佳超参数组合:

from sklearn.model_selection import GridSearchCV  

param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}  
grid_search = GridSearchCV(SVC(), param_grid, cv=3)  
grid_search.fit(X_train, y_train)  
print("最佳参数:", grid_search.best_params_)  

完整案例:鸢尾花分类实战

数据加载与探索

from sklearn.datasets import load_iris  

iris = load_iris()  
X, y = iris.data, iris.target  

print("样本数:", X.shape[0], "特征数:", X.shape[1])  

数据预处理

from sklearn.model_selection import train_test_split  

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  

scaler = StandardScaler()  
X_train_scaled = scaler.fit_transform(X_train)  
X_test_scaled = scaler.transform(X_test)  

模型训练与评估

from sklearn.ensemble import RandomForestClassifier  
from sklearn.metrics import accuracy_score, classification_report  

model = RandomForestClassifier(n_estimators=100)  
model.fit(X_train_scaled, y_train)  

y_pred = model.predict(X_test_scaled)  
print("准确率:", accuracy_score(y_test, y_pred))  
print("详细报告:\n", classification_report(y_test, y_pred))  

结论

通过本文,您已掌握从数据预处理、模型训练到评估优化的完整机器学习流程。Sklearn 教程的核心价值在于其将复杂算法封装为简单接口,帮助开发者聚焦于业务逻辑而非底层实现。建议读者通过以下方式深化学习:

  1. 实践项目:尝试用 Sklearn 解决实际问题(如房价预测、客户分类)。
  2. 算法对比:对比不同模型在相同数据集上的表现差异。
  3. 超参数优化:深入理解网格搜索与随机搜索的原理与应用。

机器学习是一门实践驱动的学科,持续编码与实验将帮助您快速成长。下一步,您可以探索深度学习框架(如 TensorFlow)或尝试参与 Kaggle 竞赛,将 Sklearn 教程中的知识转化为实战能力。


通过本文的 Sklearn 教程,希望每位开发者都能在机器学习的道路上迈出坚实的第一步,并在后续实践中不断突破自我!

最新发布