一、机器学习介绍
1. 定义
机器学习(ML)是人工智能的分支,核心是让计算机从数据中自动学习规律,并根据所得到的规律对未来数据进行预测,而非显式编程。例如:通过历史房价数据预测新房价,系统自动学习"面积-位置-价格"的关系。
2. 发展简史
- 1950s:图灵提出"学习机器"概念
- 1980s:决策树、反向传播算法诞生
- 1990s:支持向量机(SVM)兴起
- 2000s:集成方法(如随机森林)突破
- 2010s:深度学习爆发,但传统ML仍主导结构化数据处理
3. 分类
类型 | 特点 | 典型算法 |
---|---|---|
监督学习 | 有标注数据 | 线性回归、KNN、SVM |
无监督学习 | 无标注数据 | K-Means、PCA |
半监督学习 | 部分标注数据 | 标签传播算法 |
强化学习 | 通过奖励机制学习 | Q-Learning |
4. 必备基础知识
-
数学:线性代数(矩阵运算)、概率论(贝叶斯定理)、微积分(梯度计算)
-
编程:Python基础 + NumPy/Pandas库
-
学习路径:
Python基础 NumPy/Pandas Matplotlib可视化 Scikit-Learn实战
5. 应用场景
- 金融:信用评分
- 医疗:疾病预测
- 零售:推荐系统
- 工业:设备故障检测
6. 趋势分析
传统ML优势:小数据高效训练 、模型可解释性强(如决策树规则),与深度学习形成互补。
7. 项目开发流程
plaintext
1. 问题定义 → 2. 数据收集 → 3. 数据清洗 → 4. 特征工程 → 5. 模型训练 → 6. 模型评估 → 7. 部署应用
二、Scikit-Learn工具详解
Scikit-Learn:Python最流行的机器学习库,提供统一API接口,涵盖完整机器学习工作流。
**1. 安装与验证 **:
bash
pip install scikit-learn # 需预先安装NumPy和SciPy
python
import sklearn
print(sklearn.__version__) # 输出:1.4.0
2. 核心模块
模块 | 功能 |
---|---|
sklearn.datasets |
数据集加载 |
sklearn.preprocessing |
数据预处理 |
sklearn.feature_extraction |
特征提取 |
sklearn.model_selection |
模型选择与验证 |
sklearn.metrics |
评估指标 |
三、数据集详解
1. 玩具数据集(内置示例)
- 鸢尾花数据集(
load_iris
):150朵花,4个特征(花瓣长宽) - 手写数字(
load_digits
):8x8像素的0-9数字图片
2. 现实世界数据集
- 房价预测(
fetch_california_housing
):20,640条房屋数据 - 新闻分类(
fetch_20newsgroups
):18,000篇新闻文本
3. 数据加载示例
python
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target # X是特征矩阵,y是标签向量
4. 本地CSV数据加载
python
import pandas as pd
df = pd.read_csv('data.csv')
X = df[['feature1', 'feature2']] # 选择特征列
y = df['target'] # 目标列
5. 数据集划分
数据划分原理 :
https://scikit-learn.org/stable/_images/grid_search_cross_validation.png
为什么划分? 防止模型"死记硬背"训练数据(过拟合)
python
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 80%训练,20%测试
四、特征工程:数据到模型的桥梁
1. 概念
特征工程是将原始数据转换为更能表达问题本质的特征的过程,是提升模型性能的关键。类比烹饪:食材(原始数据)→ 切配调味(特征工程)→ 更易烹制(模型训练)。
2. 关键API与原理
(1)字典特征提取(DictVectorizer
)
-
原理:将分类特征转换为数值矩阵
-
场景:处理类别型特征(如"城市"=["北京","上海"])
-
独热编码(One-Hot)原理 :
将分类变量转换为二进制向量:
python
原始数据:
[{'城市': '北京', '温度': 25},
{'城市': '上海', '温度': 30}]
转换后:
[[1, 0, 25], # 北京 → [1,0]
[0, 1, 30]] # 上海 → [0,1]
(2)文本特征提取
-
词频统计(
CountVectorizer
)将文本转换为词频矩阵
-
处理流程:
- 分词:["我","爱","机器学习"]
- 构建词汇表:{"我":0, "爱":1, "机器学习":2}
- 生成向量:[1, 1, 1](每个词出现1次)
pythoncorpus = ["I love ML", "ML is fun"] → 词汇表:["I", "love", "ML", "is", "fun"] → 向量化:[[1,1,1,0,0], [0,0,1,1,1]]
-
TF-IDF(
TfidfVectorizer
)核心思想:衡量词语在文档中的重要程度
解决痛点 :抑制高频但无意义的词(如"的"、"是")
公式:TF = 词在文档中出现次数 / 文档总词数 IDF = log(总文档数 / (包含该词的文档数 + 1)) TF-IDF = TF(词频) × IDF(逆文档频率)
物理意义:
- 常见词(如"的")→ IDF值低 → 权重低
- 专业词(如"梯度下降")→ IDF值高 → 权重高
举例 :
在1000篇文档中,"机器学习"出现在20篇,某文档中该词出现5次:
TF = 5 / 文档总词数
IDF = log(1000/20) ≈ 3.9
TF-IDF = TF * 3.9
(3)无量纲化(预处理)
-
标准化(StandardScaler)
z = (x - μ) / σ
(μ:均值, σ:标准差)将数据缩放到均值为0,标准差为1
-
归一化(MinMaxScaler)
x' = (x - min) / (max - min)
将数据压缩到[0,1]区间
(4)特征降维(PCA)
- 为什么降维? 消除冗余特征,加速训练
- 核心思想:找到数据最大方差方向,用更少维度保留主要信息
- 数学本质 :找到数据方差最大的方向(主成分)
步骤 :- 计算协方差矩阵
- 求矩阵的特征值和特征向量
- 按特征值从大到小保留前k个特征向量
投影公式:新坐标 = 原始数据 × 特征向量矩阵
完整示例:鸢尾花分类:
python
# 1. 导入工具库
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline
# 2. 创建处理管道
pipeline = make_pipeline(
StandardScaler(), # 标准化
PCA(n_components=2), # 降维到2维
RandomForestClassifier() # 分类模型
)
# 3. 训练评估
pipeline.fit(X_train, y_train)
accuracy = pipeline.score(X_test, y_test)
print(f"模型准确率:{accuracy:.2f}")