机器学习核心知识体系与Scikit-learn实践指南

一、机器学习基础

1. 机器学习定义

  • 核心思想:让计算机从数据中学习规律并预测未来数据

  • 机器学习:包括如聚类、分类、决策树、贝叶斯、神经网络、深度学习(Deep Learning)等算法

  • 核心方法

    • 监督学习(分类、回归)<线性,k邻近>

    • 无监督学习(聚类、降维)

    • 半监督学习

    • 强化学习【有两个可以进行交互的对象:智能体(Agnet)和环境(Environment),还有四个核心要素策略(Policy)、回报函数(收益信号,Reward Function)、价值函数(Value Function)和环境模型(Environment Model),其中环境模型是可选的】

2. 发展历程里程碑


3. 项目开发流程

  1. 数据采集与清洗

  2. 特征工程处理

  3. 模型训练与调优

  4. 模型评估验证

  5. 部署应用优化

二、Scikit-learn工具库

2.1 数据集操作

2.1.1 内置数据集加载
from sklearn.datasets import load_iris
​
# 加载鸢尾花数据集
iris = load_iris()
print(f"特征矩阵维度:{iris.data.shape}")  # (150,4)
print(f"类别标签:{iris.target_names}")    # ['setosa' 'versicolor' 'virginica']
2.1.2 数据集划分策略
from sklearn.model_selection import train_test_split
​
# 分层抽样划分数据集
X_train, X_test, y_train, y_test = train_test_split(
    iris.data,
    iris.target, 
    test_size=0.2,
    stratify=iris.target,
    random_state=42
)

2.2 特征工程精要

特征工程部分,要明白归一化和标准化的区别,需要更详细的数学公式和代码示例。另外,PCA的原理部分需要更深入的解释,包括协方差矩阵和特征值分解的相关内容。

2.2.1 文本特征提取
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
​
# 中文文本预处理
texts = ["教育学会坚定支持教育事业", "扶持民办学校发展", "教育事业贡献重大"]
tokenized = [" ".join(jieba.cut(t)) for t in texts]
​
# TF-IDF特征提取
tfidf = TfidfVectorizer(max_features=5)
X_tfidf = tfidf.fit_transform(tokenized).toarray()
print("特征词汇:", tfidf.get_feature_names_out())
print("TF-IDF矩阵:\n", X_tfidf)
2.2.2 数据标准化
from sklearn.preprocessing import StandardScaler
​
scaler = StandardScaler()
X_train_std = scaler.fit_transform(X_train)
X_test_std = scaler.transform(X_test)

2.22无量纲化预处理详解

无量纲化的核心目的是消除不同特征之间的量纲差异(如单位、数量级),使得数据具有可比性,从而提升模型性能。主要原因包括:

  • 模型收敛加速:梯度下降类模型(如线性回归、神经网络)在特征尺度统一时,参数更新更稳定,收敛更快。

  • 距离计算优化:KNN、SVM、聚类等依赖距离计算的模型,避免大尺度特征主导结果。

  • 特征重要性公平:确保模型不会因数值范围差异而错误评估特征重要性。


2. 相关API:归一化 vs. 标准化
归一化(Normalization)
  • 方法:将数据线性缩放到[0, 1][-1, 1]区间。

  • 公式:( X{\text{norm}} = \frac{X - X{\min}}{X{\max} - X{\min}} )

  • APIsklearn.preprocessing.MinMaxScaler

    from sklearn.preprocessing import MinMaxScaler
    scaler = MinMaxScaler(feature_range=(0, 1))  # 默认[0,1]
    X_scaled = scaler.fit_transform(X)

  • 适用场景:数据分布边界明确,或需要严格限定输出范围(如图像像素值)。

  • 缺点:对异常值敏感(极值会压缩正常数据范围)。

标准化(Standardization)
  • 方法:将数据调整为均值为0、标准差为1的正态分布。

  • 公式:( X_{\text{std}} = \frac{X - \mu}{\sigma} )

  • APIsklearn.preprocessing.StandardScaler

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)

  • 适用场景:数据存在异常值,或假设数据近似正态分布(如线性回归、逻辑回归)。

  • 优点:对异常值鲁棒性更强。


3. 归一化 vs. 标准化的意义对比
方法 核心意义 适用模型 异常值影响
归一化 消除量纲,严格限定数值范围 SVM、KNN、神经网络 敏感(压缩数据分布)
标准化 消除量纲,保留数据分布形状(如正态化) 线性回归、逻辑回归、主成分分析(PCA) 相对鲁棒

4. 示例代码
​
# 归一化示例
from sklearn.preprocessing import MinMaxScaler
import numpy as np
​
data = np.array([[30, 2.5], [40, 3.5], [25, 1.9]])
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print("归一化结果:\n", normalized_data)
​
# 标准化示例
from sklearn.preprocessing import StandardScaler
​
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
print("标准化结果:\n", standardized_data)

​

5. 注意事项
  • 树模型无需无量纲化:如决策树、随机森林、XGBoost基于分裂规则,不受特征尺度影响。

  • 测试集处理:应使用训练集的scaler对象(通过fit_transform训练,transform处理测试集),避免数据泄露。

  • 其他方法:针对异常值可使用RobustScaler(以中位数和四分位数缩放),或针对稀疏数据使用MaxAbsScaler

通过合理选择归一化或标准化,能显著提升模型性能,是特征工程中的关键步骤!

2.2.2 数据标准化
from sklearn.preprocessing import StandardScaler
​
scaler = StandardScaler()
X_train_std = scaler.fit_transform(X_train)
X_test_std = scaler.transform(X_test)

2.3 降维技术

特征降维

(a) VarianceThreshold 低方差过滤特征选择

(b) 根据相关系数的特征选择

2.3 降维技术

2.3.1 PCA数学原理

给定n个样本的m维数据矩阵X:

  1. 中心化处理:X′=X−XˉX′=XXˉ

  2. 计算协方差矩阵:C=1n−1X′TX′C=n−11XT**X

  3. 特征值分解:C=VΛVTC=VΛV**T

  4. 选择前k个最大特征值对应特征向量

  5. 投影降维:Z=XV[:,:k]Z=X**V[:,:k]

2.3.2 Scikit-learn实现

三、K近邻算法深度解析

3.1 算法核心原理

graph LR
A[输入样本] --> B[计算距离]
B --> C{选择K个最近邻}
C --> D[统计类别频率]
D --> E[确定预测类别]

3.2 距离度量方法

距离类型 公式 特点
欧氏距离 ∑(xi−yi)2∑(x**iy**i)2 各向同性
曼哈顿距离 ∑∥xi−yi∥∑∥x**iy**i 抗异常值
余弦相似度 x⋅y∥x∥∥y∥∥x∥∥yxy 方向敏感

3.3 完整实现示例

from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
​
# 构建完整流水线
model = make_pipeline(
    StandardScaler(),
    KNeighborsClassifier(
        n_neighbors=5,
        weights='distance',
        metric='minkowski',
        p=2
    )
)
​
# 模型训练与评估
model.fit(X_train, y_train)
print(f"测试准确率:{model.score(X_test, y_test):.2%}")
​
# 新样本预测
new_samples = [[5.1, 3.5, 1.4, 0.2], [6.7, 3.0, 5.2, 2.3]]
predictions = model.predict(new_samples)
print("预测结果:", [iris.target_names[p] for p in predictions])

2. 数据标准化

标准化与归一化对比
方法 公式 适用场景
Z-score (x - μ)/σ

存在异常值
Min-Max (x - min)/(max - min) 需要固定范围
Robust (x - median)/(IQR) 含显著离群点
L2范数归一化 x / sqrt(Σx²) 文本向量/神经网络输入

3. 降维技术

PCA数学原理

给定数据矩阵X(n×m),主成分分析步骤:

  1. 中心化处理:X' = X - mean(X)

  2. 计算协方差矩阵:C = X'^T X' / (n-1)

  3. 特征值分解:C = VΛV^T

  4. 选择前k大特征值对应特征向量构成投影矩阵

  5. 降维数据:Z = XV[:,:k]

from sklearn.decomposition import PCA
​
pca = PCA(n_components=0.95)  # 保留95%方差
X_pca = pca.fit_transform(X_std)
print(f"降维后维度:{X_pca.shape[1]}")

四、K近邻算法实践

1. 距离度量

常用距离公式
  • 欧氏距离:√Σ(xi - yi)²

  • 曼哈顿距离:Σ|xi - yi|

  • 余弦相似度:(x·y)/(||x||·||y||)

from sklearn.metrics import pairwise_distances
​
X = [[0, 1], [1, 2]]
euclidean = pairwise_distances(X, metric='euclidean')
manhattan = pairwise_distances(X, metric='manhattan')

2. KNN分类实现

from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
​
# 构建完整流水线
model = make_pipeline(
    StandardScaler(),
    KNeighborsClassifier(
        n_neighbors=5,
        weights='distance',  # 距离加权
        metric='minkowski', 
        p=2  # 欧氏距离
    )
)
​
model.fit(X_train, y_train)
print(f"测试准确率:{model.score(X_test, y_test):.2%}")

五、项目实战流程

1. 完整建模示例

# 1. 数据加载
from sklearn.datasets import fetch_california_housing
​
housing = fetch_california_housing()
X, y = housing.data, housing.target
​
# 2. 数据预处理
from sklearn.preprocessing import RobustScaler
from sklearn.impute import SimpleImputer
​
preprocessor = make_pipeline(
    SimpleImputer(strategy='median'),
    RobustScaler()
)
​
# 3. 模型构建
from sklearn.ensemble import RandomForestRegressor
​
model = make_pipeline(
    preprocessor,
    PCA(n_components=0.95),
    RandomForestRegressor(n_estimators=100)
)
​
# 4. 模型评估
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)
model.fit(X_train, y_train)
print(f"R²分数:{model.score(X_test, y_test):.2f}")

2. 模型部署

import joblib
​
# 保存模型
joblib.dump(model, 'housing_model.pkl') 
​
# 加载预测
loaded_model = joblib.load('housing_model.pkl')
prediction = loaded_model.predict(new_data)

知识要点总结

  1. 距离度量

    • 欧氏距离:直线距离,对尺度敏感

    • 曼哈顿距离:网格路径,抗异常值

    • 余弦相似度:方向相似性,适用于高维稀疏数据

  2. TF-IDF原理

    • TF = 词频 / 文档总词数

    • IDF = log(总文档数 / (包含该词的文档数 + 1))

    • 惩罚常见词,突出特征词

  3. PCA数学本质

    • 协方差矩阵特征分解

    • 选择最大特征值对应特征向量

    • 实现线性降维的同时最大化方差

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐