Sklearn 教程(保姆级教程)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言
在当今数据驱动的时代,机器学习已成为编程开发者的一项核心技能。Scikit-learn(简称Sklearn)作为 Python 生态中最流行 的机器学习库,凭借其简洁的 API 设计和丰富的算法实现,成为入门与进阶开发者的首选工具。无论你是想预测房价、分类图像,还是构建推荐系统,Sklearn 都能提供一站式解决方案。本文将以循序渐进的方式,结合实际案例,带您系统掌握 Sklearn 的核心功能与应用场景。
安装与环境准备
安装方法
在开始之前,确保已安装 Python 环境。Sklearn 可通过 pip 直接安装:
pip install scikit-learn
此外,还需安装 numpy
、pandas
等数据处理库,以及 matplotlib
或 seaborn
用于可视化。
第一个 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 分数 | 精确率与召回率的调和平均数 |
交叉验证与网格搜索
交叉验证:避免因数据划分导致的过拟合,常用 KFold
或 StratifiedKFold
:
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 教程的核心价值在于其将复杂算法封装为简单接口,帮助开发者聚焦于业务逻辑而非底层实现。建议读者通过以下方式深化学习:
- 实践项目:尝试用 Sklearn 解决实际问题(如房价预测、客户分类)。
- 算法对比:对比不同模型在相同数据集上的表现差异。
- 超参数优化:深入理解网格搜索与随机搜索的原理与应用。
机器学习是一门实践驱动的学科,持续编码与实验将帮助您快速成长。下一步,您可以探索深度学习框架(如 TensorFlow)或尝试参与 Kaggle 竞赛,将 Sklearn 教程中的知识转化为实战能力。
通过本文的 Sklearn 教程,希望每位开发者都能在机器学习的道路上迈出坚实的第一步,并在后续实践中不断突破自我!