监督学习入门
监督学习入门
什么是监督学习
监督学习(Supervised Learning)是机器学习中最常用的范式。其核心思想是:使用带有标签(label)的训练数据来训练模型,让模型学习输入特征到输出标签的映射关系。
就像老师给学生批改作业一样,监督学习中的每个训练样本都包含了"题目"(特征)和"答案"(标签),模型通过不断学习这些样本来提高预测能力。
监督学习的两大任务
1. 分类(Classification)
预测结果是离散的类别标签。例如:
- 垃圾邮件检测(垃圾/正常)
- 图像识别(猫/狗/鸟)
- 疾病诊断(阳性/阴性)
2. 回归(Regression)
预测结果是连续的数值。例如:
- 房价预测
- 股票价格预测
- 温度预测
常用监督学习算法
| 算法 | 适用任务 | 特点 |
|---|---|---|
| 线性回归 | 回归 | 简单、可解释性强 |
| 逻辑回归 | 分类 | 适合二分类问题 |
| 决策树 | 分类/回归 | 易理解、可可视化 |
| 随机森林 | 分类/回归 | 精度高、抗过拟合 |
| 支持向量机 | 分类/回归 | 适合高维数据 |
| 神经网络 | 分类/回归 | 处理复杂非线性问题 |
监督学习工作流程
收集带标签数据 → 数据预处理 → 划分训练/测试集 → 选择算法
→ 训练模型 → 评估性能 → 调优 → 部署
代码示例:监督学习分类实战
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import warnings
warnings.filterwarnings('ignore')
# 加载葡萄酒数据集
wine = load_wine()
X, y = wine.data, wine.target
print(f"特征数: {X.shape[1]}, 样本数: {X.shape[0]}, 类别数: {len(set(y))}")
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 比较三种不同算法
models = {
'KNN': KNeighborsClassifier(n_neighbors=5),
'SVM': SVC(kernel='rbf', C=1.0, random_state=42),
'Random Forest': RandomForestClassifier(n_estimators=100, random_state=42)
}
print("\n模型性能对比:")
print("-" * 45)
for name, model in models.items():
if name == 'Random Forest':
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
else:
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)
# 交叉验证
if name == 'Random Forest':
cv_scores = cross_val_score(model, X, y, cv=5)
else:
cv_scores = cross_val_score(model, X_train_scaled, y_train, cv=5)
print(f"{name:15} | 准确率: {accuracy:.4f} | 5折CV: {cv_scores.mean():.4f}")
# 输出最佳模型的混淆矩阵
print("\n随机森林混淆矩阵:")
print(confusion_matrix(y_test, models['Random Forest'].predict(X_test)))
模型评估指标
- 准确率(Accuracy):正确预测的比例
- 精确率(Precision):预测为正的样本中实际为正的比例
- 召回率(Recall):实际为正的样本中被正确预测的比例
- F1分数:精确率和召回率的调和平均
总结
监督学习是机器学习的基石,掌握它将为后续学习更复杂的算法奠定基础。关键是要理解数据质量对模型性能的影响,以及如何选择合适的评估指标来衡量模型效果。