从 scikit-learn 开始,机器学习之公开案例

71 阅读8分钟

下面我会用通俗易懂的语言,向机器学习初学者讲清楚:

  • 什么是典型的机器学习案例?
  • 常见的数据集有哪些?
  • 每种任务适合用什么算法?

内容不讲复杂公式,只讲“是什么 + 怎么用 + 举例子”,让你快速建立直观理解。


🌟 一、机器学习的三大典型任务

机器学习主要分为三类任务,就像三种“考试题型”:

类型中文名目标举个生活例子
1. 分类(Classification)判断类别给数据打标签邮件是“垃圾邮件”还是“正常邮件”?
2. 回归(Regression)预测数值输出一个数字明天的气温是多少度?
3. 聚类(Clustering)自动分组没有标签,自己找规律客户可以分成哪几类人群?

我们一个一个来讲解。


🔹 1. 分类任务(Classification)

✅ 是什么?

判断一个样本属于哪个类别。比如:

  • 图片是猫还是狗?
  • 新闻属于体育、娱乐还是科技?

📚 典型数据集

数据集内容特点
Iris(鸢尾花)150 条花的数据(花瓣长度、宽度等),分 3 种花小而经典,新手必学
MNIST(手写数字)28×28 像素的手写数字图片(0~9)7万张图,图像识别入门
Titanic(泰坦尼克号)乘客信息(年龄、舱位等),预测是否生还真实数据,适合练习

⚙️ 常用算法

算法适合场景特点
逻辑回归(Logistic Regression)简单分类不是“回归”,其实是分类!简单高效
决策树(Decision Tree)可解释性强像“选择题流程图”
随机森林(Random Forest)准确率高多棵树投票,抗过拟合
支持向量机(SVM)小数据分类好找“最宽的分界线”
K近邻(KNN)简单直观“近朱者赤”,看邻居是谁

💡 初学者建议从 Iris + 逻辑回归/随机森林 开始练手!


🔹 2. 回归任务(Regression)

✅ 是什么?

预测一个连续的数值。比如:

  • 房价多少钱?
  • 学生成绩能考多少分?

📚 典型数据集

数据集内容特点
波士顿房价(Boston Housing)房子的各种特征(房间数、位置等),预测房价经典回归数据集(注意:新版 scikit-learn 已移除,可用替代)
加利福尼亚房价(California Housing)类似波士顿,但更大更真实推荐替代品
糖尿病数据集(Diabetes)患者生理指标,预测病情严重程度医疗领域常用

⚙️ 常用算法

算法适合场景特点
线性回归(Linear Regression)关系是直线时最基础,像 y = ax + b
岭回归(Ridge) / Lasso特征多、怕过拟合加了“惩罚项”防止乱学
决策树回归非线性关系树结构预测数值
随机森林回归高精度回归多棵树平均结果

💡 初学者建议从 加利福尼亚房价 + 线性回归/随机森林回归 入门。


🔹 3. 聚类任务(Clustering)

✅ 是什么?

把相似的数据自动分组,没有提前给标签。比如:

  • 用户行为相似的分成一类
  • 新闻文章自动归类

📚 典型数据集

数据集内容特点
Iris(也可用于聚类)不告诉模型种类,让它自己分三类验证聚类效果
客户消费数据(如 Mall Customers)年龄、收入、消费评分市场营销常用
自造数据 make_blobs自动生成带簇的数据教学演示神器

⚙️ 常用算法

算法适合场景特点
K-Means簇是圆形、均匀分布最常用,“选中心 → 分配 → 更新”循环
层次聚类(Hierarchical)想看“树状图”一层层合并或拆分
DBSCAN形状不规则的簇能发现噪声点,不怕 outliers

💡 初学者建议从 Mall Customers + K-Means 开始,画个图一看就懂!


🧩 补充:其他常见任务(进阶了解)

任务简介例子
降维(Dimensionality Reduction)把高维数据变简单PCA 把 100 维压到 2 维画图
推荐系统给用户推喜欢的东西你可能还喜欢这部电影
时间序列预测根据过去预测未来股票价格、天气预报

🎯 初学者学习路线建议

第一步:动手玩 Iris 分类

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据
data = load_iris()
X, y = data.data, data.target

# 拆分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 训练模型
model = RandomForestClassifier()
model.fit(X_train, y_train)

# 预测并评估
pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, pred))  # 通常 >95%

第二步:试试加州房价回归

from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression

data = fetch_california_housing()
X, y = data.data, data.target

model = LinearRegression()
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print("R²得分:", score)  # 看模型解释了多少变化

第三步:客户聚类(K-Means)

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 假设你有客户数据(收入 vs 支出)
X = [[20, 1000], [30, 2000], ...]  # 示例数据

kmeans = KMeans(n_clusters=3)
labels = kmeans.fit_predict(X)

plt.scatter(X[:,0], X[:,1], c=labels)
plt.title("客户聚类结果")
plt.show()

📌 总结:一张表帮你理清楚

任务数据集举例算法举例输出形式
分类Iris, MNIST, Titanic逻辑回归、随机森林、SVM猫 / 狗、垃圾邮件 / 正常
回归加州房价、糖尿病线性回归、随机森林回归500万元、85.6分
聚类客户数据、Iris(无标签)K-Means、DBSCAN自动分出 A/B/C 类人群

✅ 给初学者的建议

  1. 不要一上来就学深度学习,先掌握传统机器学习。
  2. 从 scikit-learn 开始:它封装好了所有算法,一行代码就能用。
  3. 多画图:用 matplotlib 看数据分布和结果,直观理解。
  4. 动手最重要:复制上面代码跑一遍,比看十遍都强!

🎯 最后一句话送给你:

机器学习不是魔法,而是“从数据中找规律”。你不需要懂所有算法,先学会“在哪用什么方法”,再慢慢深入原理。


📚 附录:常用数据集及获取方式(含链接 + 代码)

1. Iris 鸢尾花数据集(分类)

from sklearn.datasets import load_iris
data = load_iris()
X, y = data.data, data.target  # 特征和标签
print(data.DESCR)  # 查看详细说明

2. MNIST 手写数字数据集(分类)

  • 🎯 任务:识别手写数字 0~9
  • 🔗 官网:yann.lecun.com/exdb/mnist/
  • ✅ 推荐方式:使用 torchvisiontensorflow/keras,但在 sklearn 中也有简化版
# 方法1:用 scikit-learn(小样本)
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data, mnist.target  # 70000张 28x28 图片

⚠️ 注意:完整 MNIST 是 7 万张图,数据较大,初学者可用子集练习。


3. Titanic 泰坦尼克号数据集(分类)

  • 🎯 任务:预测乘客是否生还
  • 🔗 Kaggle 页面:www.kaggle.com/c/titanic
  • 💡 包含字段:年龄、性别、舱位、票价、是否生还等
  • ✅ 可从 Kaggle 下载,或使用 seaborn 内置版本快速体验:
import seaborn as sns
titanic = sns.load_dataset('titanic')
print(titanic.head())

提示:注册 Kaggle.com 后可免费下载原始 train.csvtest.csv 文件。


4. 加利福尼亚房价数据集(回归)

  • 🎯 任务:预测房屋价格中位数
  • 🔗 来源:美国人口普查数据
  • ✅ 推荐方式:直接通过 sklearn 获取
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
X, y = housing.data, housing.target
print(housing.DESCR)

✅ 替代“波士顿房价”(因隐私问题已被移除),这是目前最推荐的回归入门数据集!


5. 糖尿病数据集(回归)

  • 🎯 任务:预测病情进展程度
  • 🔗 来源:scikit-learn 内置
  • ✅ 直接加载:
from sklearn.datasets import load_diabetes
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target

6. 客户聚类数据集(Mall Customers)

  • 🎯 任务:根据收入和消费行为对客户分群
  • 🔗 公开数据集页面(Kaggle):
  • 💡 字段:CustomerID, Gender, Age, Annual Income, Spending Score
  • ✅ 下载后用 pandas 读取:
import pandas as pd
df = pd.read_csv('Mall_Customers.csv')
X = df[['Annual Income (k$)', 'Spending Score (1-100)']].values

7. 自动生成的数据集(教学专用)

适合练手,无需下载,一行代码生成!

from sklearn.datasets import make_blobs, make_classification, make_regression

# 聚类用:生成带簇的数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.6)

# 分类用:生成可分的类别数据
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2)

# 回归用:生成线性关系数据
X, y = make_regression(n_samples=100, n_features=1, noise=10)

✅ 这些是学习算法原理的绝佳工具!


🧩 总结:数据集获取方式一览表

数据集类型获取方式推荐指数
Iris分类load_iris()⭐⭐⭐⭐⭐
MNIST分类fetch_openml('mnist_784') 或 Kaggle⭐⭐⭐⭐☆
Titanic分类Kaggleseaborn.load_dataset('titanic')⭐⭐⭐⭐⭐
California Housing回归fetch_california_housing()⭐⭐⭐⭐⭐
Diabetes回归load_diabetes()⭐⭐⭐⭐☆
Mall Customers聚类Kaggle 下载⭐⭐⭐⭐☆
make_ 函数*教学make_blobs, make_classification⭐⭐⭐⭐⭐

📦 小贴士:如何统一管理这些数据?

建议你创建一个项目文件夹,结构如下:

ml-beginner/
├── data/
│   ├── iris.csv
│   ├── titanic_train.csv
│   └── mall_customers.csv
├── notebooks/
│   ├── 01_iris_classification.ipynb
│   ├── 02_housing_regression.ipynb
│   └── 03_customer_clustering.ipynb
└── scripts/
    └── utils.py

然后用 Jupyter Notebook 一步步跑通每个案例!


🎁 附加资源推荐

资源地址说明
Scikit-learn 官方数据集文档scikit-learn.org/stable/data…所有内置数据集都在这里
Kaggle 入门竞赛合集www.kaggle.com/learn免费教程 + 数据集
Seaborn 内置数据集sns.get_dataset_names()快速加载多个小数据集

🎯 最后提醒:

不要纠结“哪个数据集最好”,关键是:选一个 → 跑起来 → 看懂结果 → 改一点再试。