学完 sklearn 基础还是不敢上手实战?分类、回归、聚类到底该用哪个模型?代码写了半天一跑就报错,问题到底出在哪?不少朋友私信兔子哥,说理论看了一堆,一到实际操作就懵圈。其实啊,机器学习实战没那么难,今天咱们就拿三个经典案例,把分类、回归、聚类的实操流程拆解开,代码逐行讲清楚,再把新手常踩的坑列出来,跟着做保准你能上手!
先给大家捋个明白,这三类任务到底有啥区别?直接上表格看得更清楚:
| 任务类型 | 核心目标 | 数据特点 | 常用模型 | 评估指标 |
|---|---|---|---|---|
| 分类 | 给数据贴标签(比如判断邮件是否垃圾) | 标签是离散值(如 0/1、A/B/C) | 决策树、KNN、逻辑回归 | 准确率、混淆矩阵 |
| 回归 | 预测连续数值(比如房价、温度) | 标签是连续值(如 120.5、36.8) | 线性回归、随机森林回归 | 均方误差、R² 分数 |
| 聚类 | 自动给数据分组(比如用户分群) | 没有标签,靠数据相似性分组 | K-means、DBSCAN | 轮廓系数、Calinski 指数 |
案例一:分类任务 —— 用决策树给鸢尾花分类
咱们还用经典的鸢尾花数据集,目标是根据花萼、花瓣的尺寸,判断它属于哪类鸢尾花。
第一步加载数据和模型:
python
from sklearn.datasets import load_irisfrom sklearn.tree import DecisionTreeClassifier # 导入决策树模型from sklearn.model_selection import train_test_split这步简单吧?但新手常犯一个错 —— 导入模型时把分类和回归搞混,比如写成 DecisionTreeRegressor,后面训练肯定报错,这点要注意。
第二步拆分数据:
python
iris = load_iris()X = iris.data # 特征数据(花萼长度、宽度等)y = iris.target # 标签(0/1/2代表三类花)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)这里要记住,特征变量用大写 X,标签用小写 y,很多人刚开始会把这俩弄反,导致模型训练失败。test_size 设 0.2 就是留 20% 数据当测试集,这是为了检验模型好不好用。
第三步训练和评估:
python
model = DecisionTreeClassifier(max_depth=3) # 限制树深度,避免过拟合model.fit(X_train, y_train) # 用训练集训练print("准确率:", model.score(X_test, y_test)) # 用测试集看效果易错点来了!如果不设 max_depth,决策树可能长得太复杂,把训练数据的细节都记住了,到测试集就不准,这就是过拟合。新手常忽略这个参数,结果模型在自己电脑上效果好,换个数据就拉胯。
案例二:回归任务 —— 预测房价(以波士顿房价为例)
回归任务预测连续值,咱们用波士顿房价数据集(注:新版本 sklearn 可能需要用 fetch_openml 加载,老版本直接 load_boston 就行)。
核心代码走一遍:
python
from sklearn.datasets import load_boston # 老版本用这个from sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error # 评估误差的指标boston = load_boston()X = boston.data # 特征(房间数、犯罪率等)y = boston.target # 房价(连续值)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)model = LinearRegression()model.fit(X_train, y_train)y_pred = model.predict(X_test) # 预测测试集房价print("均方误差:", mean_squared_error(y_test, y_pred)) # 数值越小越好这里新手容易踩的坑是啥?特征维度!如果你的测试集特征数量和训练集不一样,比如少了一列数据,预测时肯定报错。所以预处理时一定要保证训练集和测试集的特征一致。另外,线性回归对异常值很敏感,数据里有极端大的房价没处理,结果就会不准,这步别忘了检查数据。
案例三:聚类任务 —— 用 K-means 给数据自动分组
聚类没有标签,咱们用 make_blobs 生成模拟数据,让模型自动分成 3 组。
代码实操:
python
from sklearn.datasets import make_blobsfrom sklearn.cluster import KMeansimport matplotlib.pyplot as plt # 画图看效果X, _ = make_blobs(n_samples=300, centers=3, random_state=42) # 生成3组数据model = KMeans(n_clusters=3) # 告诉模型要分3组model.fit(X)labels = model.predict(X) # 得到每个数据的分组标签# 画图看看聚类效果plt.scatter(X[:,0], X[:,1], c=labels)plt.show()聚类最容易错的就是 K 值!如果把 n_clusters 设成 2,明明数据该分 3 组,结果肯定不对。怎么选 K 值?可以多试几个,看轮廓系数,数值越接近 1 越好。还有啊,聚类前最好做数据归一化,不然有的特征数值大(比如收入),有的小(比如年龄),模型会偏向数值大的特征,分组就不准了。
可能有朋友问:“聚类没有标签,怎么知道分的好不好?” 除了看轮廓系数,还可以画图直观感受,组内数据越集中、组间越分散,效果就越好。
兔子哥说句心里话,实战最重要的不是记住代码,是搞懂每个步骤的逻辑。比如为啥要拆分数据?因为模型不能只 “死记硬背” 训练数据,得能举一反三。遇到报错别慌,先看报错信息里的关键词,十有八九是数据格式不对或者参数设错了,一行行检查代码,多试几次就熟了。
平时练手别总用现成数据集,自己找些简单的数据试试,比如用学生成绩数据做回归预测,用客户消费数据做聚类分群,练多了自然就有感觉了。记住啊,机器学习是练出来的,不是看出来的,动手跑起来比啥都强!
标签: DecisionTreeClassifier DecisionTreeRegressor
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~