文章三《机器学习基础概念与框架实践》
文章3:机器学习基础概念与框架实践
——从理论到代码,用Scikit-learn构建你的第一个分类模型
一、机器学习基础理论:三大核心类型
机器学习是人工智能的核心,通过数据让计算机自动学习规律并做出预测或决策。根据学习方式,可分为三类:
1. 监督学习(Supervised Learning)
- 定义:有标签的数据(输入-输出对)训练模型,预测未知数据的标签。
- 典型任务:分类(如垃圾邮件识别)、回归(如房价预测)。
- 算法示例:线性回归、决策树、支持向量机(SVM)。
2. 无监督学习(Unsupervised Learning)
- 定义:无标签数据,通过发现数据内在结构进行聚类或降维。
- 典型任务:客户分群、图像压缩。
- 算法示例:K-means聚类、主成分分析(PCA)。
3. 强化学习(Reinforcement Learning)
- 定义:通过试错,让智能体在环境中学习最优策略。
- 典型任务:游戏AI(如AlphaGo)、机器人控制。
- 算法示例:Q-learning、深度Q网络(DQN)。
二、常见机器学习算法与Scikit-learn实践
1. 监督学习:线性回归(Regression)
- 原理:找到输入特征与连续输出之间的线性关系。
- Scikit-learn实现:
from sklearn.linear_model import LinearRegression import numpy as np # 生成模拟数据 X = np.array([[1], [2], [3], [4], [5]]) y = np.array([2, 4, 6, 8, 10]) # 训练模型 model = LinearRegression() model.fit(X, y) # 预测 print("预测X=6时的y值:", model.predict([[6]])) # 输出:[12.0]
2. 分类算法:决策树(Decision Tree)
- 原理:通过树状结构划分数据,每个节点代表一个特征判断。
- Scikit-learn实现:
from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载鸢尾花数据集 iris = load_iris() X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, test_size=0.2, random_state=42 ) # 训练决策树 model = DecisionTreeClassifier(max_depth=3) model.fit(X_train, y_train) # 评估 print("准确率:", model.score(X_test, y_test)) # 输出:约0.933
3. 支持向量机(SVM)
- 原理:寻找最优超平面,最大化分类间隔。
- Scikit-learn实现:
from sklearn.svm import SVC # 使用SVM分类 svm_model = SVC(kernel='linear') svm_model.fit(X_train, y_train) print("SVM准确率:", svm_model.score(X_test, y_test)) # 输出:约0.967
三、数据预处理与特征工程
数据质量直接影响模型效果,以下是关键步骤:
1. 标准化(Standardization)
将数据转换为均值为0、标准差为1的分布(如:X = (X - μ)/σ
)。
from sklearn.preprocessing import StandardScaler scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # 对特征进行标准化
2. 归一化(Normalization)
将数据缩放到[0,1]范围(如:X = (X - min)/(max - min)
)。
from sklearn.preprocessing import MinMaxScaler minmax_scaler = MinMaxScaler()
X_normalized = minmax_scaler.fit_transform(X)
3. 处理缺失值(Missing Values)
from sklearn.impute import SimpleImputer # 用均值填充数值型缺失值
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)
四、实战案例:鸢尾花分类(Iris Classification)
1. 数据加载与探索
import pandas as pd
from sklearn.datasets import load_iris iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target
print(df.head())
输出示例:
sepal length (cm) sepal width (cm) ... petal width (cm) target
0 5.1 3.5 ... 0.2 0
1 4.9 3.0 ... 0.2 0
...
2. 数据预处理
X = df.drop('target', axis=1)
y = df['target'] # 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
3. 训练SVM分类器并评估
from sklearn.metrics import accuracy_score, classification_report svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)
y_pred = svm_model.predict(X_test) # 输出评估指标
print("准确率:", accuracy_score(y_test, y_pred))
print("分类报告:\n", classification_report(y_test, y_pred))
输出示例:
准确率: 1.0
分类报告:precision recall f1-score support
0 1.00 1.00 1.00 8
1 1.00 1.00 1.00 10
2 1.00 1.00 1.00 10
micro avg 1.00 1.00 28
五、模型评估指标详解
- 准确率(Accuracy):正确预测的比例(总体正确性)。
- 精确率(Precision):预测为正类的样本中实际为正类的比例(避免误报)。
- 召回率(Recall):实际为正类的样本中被正确预测的比例(避免漏报)。
- F1-score:精确率和召回率的调和平均,综合两者表现。
六、总结与下一步行动
通过本文,你已掌握:
- 机器学习的核心类型(监督、无监督、强化学习)。
- Scikit-learn实现线性回归、决策树、SVM等算法。
- 数据预处理与特征工程的关键步骤。
- 使用鸢尾花数据集完成分类任务,并理解评估指标。
下一步建议:
- 实践:尝试用其他算法(如随机森林)替换SVM,并对比结果。
- 挑战:探索数据可视化(如用matplotlib绘制决策边界)。
- 扩展:学习交叉验证、网格搜索调参等高级技巧。
附:学习资源推荐
- Scikit-learn官方文档:https://scikit-learn.org
- 书籍:《Hands-On Machine Learning with Scikit-Learn and TensorFlow》
- 在线课程:Coursera《机器学习专项课程》(吴恩达教授)
通过理论与代码的结合,你已迈出成为机器学习工程师的第一步!动手实践是关键,开始你的第一个项目吧!