机器学习一
距离度量欧氏距离:直线距离,对尺度敏感曼哈顿距离:网格路径,抗异常值余弦相似度:方向相似性,适用于高维稀疏数据TF-IDF原理TF = 词频 / 文档总词数IDF = log(总文档数 / (包含该词的文档数 + 1))惩罚常见词,突出特征词PCA数学本质协方差矩阵特征分解选择最大特征值对应特征向量实现线性降维的同时最大化方差。
机器学习核心知识体系与Scikit-learn实践指南
一、机器学习基础
1. 机器学习定义
-
核心思想:让计算机从数据中学习规律并预测未来数据
-
机器学习:包括如聚类、分类、决策树、贝叶斯、神经网络、深度学习(Deep Learning)等算法
-
核心方法:
-
监督学习(分类、回归)<线性,k邻近>
-
无监督学习(聚类、降维)
-
半监督学习
-
强化学习【有两个可以进行交互的对象:智能体(Agnet)和环境(Environment),还有四个核心要素策略(Policy)、回报函数(收益信号,Reward Function)、价值函数(Value Function)和环境模型(Environment Model),其中环境模型是可选的】
-
2. 发展历程里程碑
3. 项目开发流程
-
数据采集与清洗
-
特征工程处理
-
模型训练与调优
-
模型评估验证
-
部署应用优化
二、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}} )
-
API:
sklearn.preprocessing.MinMaxScalerfrom 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} )
-
API:
sklearn.preprocessing.StandardScalerfrom 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:
-
中心化处理:X′=X−XˉX′=X−Xˉ
-
计算协方差矩阵:C=1n−1X′TX′C=n−11X′T**X′
-
特征值分解:C=VΛVTC=VΛV**T
-
选择前k个最大特征值对应特征向量
-
投影降维: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**i−y**i)2 | 各向同性 |
| 曼哈顿距离 | ∑∥xi−yi∥∑∥x**i−y**i∥ | 抗异常值 |
| 余弦相似度 | x⋅y∥x∥∥y∥∥x∥∥y∥x⋅y | 方向敏感 |
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),主成分分析步骤:
-
中心化处理:X' = X - mean(X)
-
计算协方差矩阵:C = X'^T X' / (n-1)
-
特征值分解:C = VΛV^T
-
选择前k大特征值对应特征向量构成投影矩阵
-
降维数据: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)
知识要点总结
-
距离度量:
-
欧氏距离:直线距离,对尺度敏感
-
曼哈顿距离:网格路径,抗异常值
-
余弦相似度:方向相似性,适用于高维稀疏数据
-
-
TF-IDF原理:
-
TF = 词频 / 文档总词数
-
IDF = log(总文档数 / (包含该词的文档数 + 1))
-
惩罚常见词,突出特征词
-
-
PCA数学本质:
-
协方差矩阵特征分解
-
选择最大特征值对应特征向量
-
实现线性降维的同时最大化方差
-
更多推荐



所有评论(0)