AI人工智能学习入门教程:从零搭建你的第一个机器学习模型

1次阅读
没有评论

共计 2367 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

机器学习核心问题类型

机器学习主要解决三类核心问题:

AI 人工智能学习入门教程:从零搭建你的第一个机器学习模型

  1. 分类 (Classification):预测离散类别标签(如垃圾邮件识别)
  2. 回归 (Regression):预测连续数值输出(如房价预测)
  3. 聚类 (Clustering):发现数据内在分组结构(如客户分群)

工具链对比:Scikit-learn vs TensorFlow vs PyTorch

  • Scikit-learn
  • 学习曲线平缓,API 设计统一(fit/predict 范式)
  • 无需 GPU 支持,适合传统机器学习算法
  • 内置丰富的数据预处理工具

  • TensorFlow

  • 计算图静态定义,适合生产环境部署
  • 需要 GPU 加速深度神经网络训练
  • 学习资源丰富但概念体系复杂

  • PyTorch

  • 动态计算图更符合 Python 编程直觉
  • 研究社区首选框架,调试方便
  • 需自行实现许多基础组件

推荐初学者从 Scikit-learn 开始建立基础认知。

实战:鸢尾花分类

环境准备

# 基础工具链
import numpy as np
import pandas as pd
from sklearn import datasets

# 预处理
from sklearn.preprocessing import StandardScaler  # 标准化工具
from sklearn.model_selection import train_test_split  # 数据分割

# 模型
from sklearn.tree import DecisionTreeClassifier  # 决策树
from sklearn.svm import SVC  # 支持向量机

# 评估
from sklearn.metrics import accuracy_score

数据标准化

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

# 标准化处理(重要:避免量纲影响模型)scaler = StandardScaler()  # 创建标准化器实例
X_scaled = scaler.fit_transform(X)  # 拟合数据并转换

# 分割数据集(stratify 保持类别比例)X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y, 
    test_size=0.3, 
    stratify=y,  # 确保训练 / 测试集类别分布一致
    random_state=42
)

模型训练对比

# 决策树训练
dt = DecisionTreeClassifier(max_depth=3)  # 限制树深度防止过拟合
dt.fit(X_train, y_train)

# SVM 训练(注意核函数选择)svm = SVC(kernel='linear', C=1.0)  # 线性核更适合小样本数据
svm.fit(X_train, y_train)

# 性能评估
print(f"Decision Tree Accuracy: {accuracy_score(y_test, dt.predict(X_test)):.2f}")
print(f"SVM Accuracy: {accuracy_score(y_test, svm.predict(X_test)):.2f}")

性能优化

交叉验证 (Cross Validation)

  1. 避免单次数据分割的随机性影响评估结果
  2. 常用 K 折交叉验证(K= 5 或 10)
  3. 代码示例:
    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(dt, X_scaled, y, cv=5)  # 5 折交叉验证
    print(f"CV Accuracy: {np.mean(scores):.2f} (±{np.std(scores):.2f})")

学习曲线诊断

from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt

# 绘制学习曲线
train_sizes, train_scores, test_scores = learning_curve(
    estimator=dt,
    X=X_scaled,
    y=y,
    cv=5,
    n_jobs=-1
)

plt.plot(train_sizes, np.mean(train_scores, axis=1), label="Training")
plt.plot(train_sizes, np.mean(test_scores, axis=1), label="Validation")
plt.xlabel("Training examples")
plt.ylabel("Accuracy")
plt.legend()

当训练集和验证集曲线差距过大时,可能出现过拟合 (overfitting)。

避坑指南

数据泄露 (Data Leakage)

  • 错误做法:在整个数据集上先做标准化再分割
  • 正确流程:仅在训练集上 fit scaler,然后 transform 测试集

类别不平衡 (Class Imbalance)

# 查看类别分布
print(np.bincount(y))  # 输出各类别样本数

# 解决方案 1:调整 class_weight
model = DecisionTreeClassifier(class_weight='balanced')  # 自动加权

# 解决方案 2:过采样 / 欠采样
from imblearn.over_sampling import SMOTE
X_resampled, y_resampled = SMOTE().fit_resample(X, y)

思考题

  1. 如何判断模型是否学到有效特征而非数据噪声?
  2. 当准确率达到 95% 后还应关注哪些指标?

建议后续学习方向:
– 混淆矩阵分析
– 特征重要性评估
– 超参数调优方法

通过这个完整案例,你应该已经掌握了机器学习基础流程的核心要点。记住:理解数据比调参更重要,好的特征工程往往能事半功倍。

正文完
 0
评论(没有评论)