机器学习数据分析helper
数据分析是一个循环迭代的过程,主要步骤如下:
- 明确问题 :定义目标和需求。
- 数据收集 :获取相关数据。
- 数据清洗 :处理缺失值、异常值等问题。
- 数据探索 :理解数据特性。
- 特征工程 :提取和优化特征。
- 模型选择与训练 :构建和训练模型。
- 模型评估 :验证模型性能。
- 结果解释与可视化 :呈现分析结果。
- 部署与监控 :应用到实际场景。
- 反馈与迭代 :持续改进。
基本库
最基础的库
1 | import pandas as pd |
画图库
1 | import seaborn as sns |
机器学习库
1 | from sklearn.model_selection import train_test_split |
sklearn库有很多 需要什么就import什么
不要直接import整个库
浏览数据
阅读数据
1 | data = pd.read_csv('data.csv') #打开data.csv文件 |
查看数据信息
1 | diabetes.describe() #查看数据的统计信息 如最大值 最小值 均值等 |
EDA
通用 subplot 模板(可自定义图表类型):
1 |
|
散点图
matlab库
1 | x = data["x"] |
相关性分析
相关性矩阵
1 | y = data['target'] #填入要进行分析的结果列 通常为最后一列 |
数据预处理
处理缺失值
删除含有缺失值的行
1 | data_cleaned = df.dropna() |
使用均值填充缺失值
1 | df_filled = df.fillna(df.mean()) |
使用众数填充缺失值
1 | # 示例数据 |
1 | # 示例数据 |
处理异常值
异常值检测
使用 Z-Score 检测
Z-Score 衡量某个值距离均值的标准差数量。通常,绝对 Z-Score 大于 3 的值被认为是异常值。
1 | # 示例数据 |
使用 IQR 方法检测
IQR(四分位距)是第三四分位数(Q3)与第一四分位数(Q1)的差值。通常,低于 Q1−1.5×IQR 或高于 Q3+1.5×IQR 的值被认为是异常值。
1 | # 示例数据 |
This is Tab 3.
箱线图(Box Plot)是一种直观的异常值检测工具。
箱线图中的点位于箱子外部的上界或下界之外,这些点即为异常值。
1 | import matplotlib.pyplot as plt |
异常值处理
删除异常值
直接从数据集中移除异常值。
1 | # 删除基于 IQR 方法检测到的异常值 |
替换异常值
将异常值替换为合理的值,例如均值、中位数或边界值。
1 | # 将异常值替换为中位数 |
胜率变换
将异常值限制在一定范围内,而不是完全删除或替换。
1 | from scipy.stats import mstats |
数据标准化与归一化
标准化
将数据转换为零均值(Mean = 0)和单位方差(Variance = 1)
- 适用于数据分布接近正态分布的情况 :标准化假设数据服从正态分布,因此在数据分布大致对称时效果更好。
- 适用于对距离敏感的算法 :例如 K-Means、KNN、SVM 和神经网络等。这些算法对特征的尺度非常敏感,标准化可以确保每个特征对结果的贡献是均衡的。
- 适用于梯度下降优化的模型 :如线性回归、逻辑回归等。标准化可以使梯度下降更快收敛。
1 | from sklearn.preprocessing import StandardScaler, MinMaxScaler |
归一化
将数据缩放到指定范围(通常是 [0, 1] 或 [-1, 1])
- 适用于数据分布未知或非正态分布的情况 :归一化不要求数据服从正态分布,因此适用于分布不规则的数据。
- 适用于最大值和最小值明确的场景 :例如图像像素值通常在 [0, 255] 范围内,归一化可以将其缩放到 [0, 1]。
- 适用于距离计算或相似性度量的算法 :例如余弦相似度、基于距离的聚类算法等。归一化可以避免大值特征主导结果。
1 | from sklearn.preprocessing import StandardScaler, MinMaxScaler |
特征编码
特征编码(Feature Encoding)是将非数值型特征(如类别型、文本型数据)转换为数值型表示的过程。它是机器学习中数据预处理的重要步骤,因为大多数机器学习算法只能处理数值型数据。
将类别型变量映射为整数(如 “red” → 0, “blue” → 1, “green” → 2)。
适用场景 :类别之间具有顺序关系(如 “low”, “medium”, “high”)。
优点 :简单高效,适用于少量类别的情况。
缺点 :可能导致模型误以为类别之间有数值上的大小关系。
1 | from sklearn.preprocessing import LabelEncoder |
将每个类别值转换为一个二进制向量。
适用场景 :类别之间没有顺序关系(如 “red”, “blue”, “green”)。
优点 :消除了类别间的数值关系,适合无序类别。
缺点 :可能会导致维度爆炸(类别数量过多时生成的特征维度过大)。
1 | from sklearn.preprocessing import OneHotEncoder |
使用目标变量的统计信息(如均值)对类别变量进行编码。
适用场景 :类别数量较多且数据量较大时,避免维度爆炸问题。
优点 :保留了类别与目标变量的关系。
缺点 :可能导致过拟合,需注意平滑处理。
1 | import pandas as pd |
特征选择与降维
特征选择
特征选择是从原始特征集中选择最重要的子集,从而减少无关或冗余特征对模型的影响。
减少过拟合 :通过去除无关特征,降低模型复杂度。
提高训练效率 :减少特征数量可以加速模型训练。
增强可解释性 :保留关键特征有助于理解模型的工作机制。
根据特征选择的方式,可分为以下三类:
根据统计指标(如相关性、互信息等)独立评估每个特征的重要性。
不依赖于具体模型。
优点 :计算简单,速度快。
缺点 :可能忽略特征之间的交互关系。
示例 :
相关系数(Pearson、Spearman)
卡方检验
互信息
1 | from sklearn.feature_selection import SelectKBest, chi2 |
通过反复训练模型来评估特征子集的表现。
常用算法:递归特征消除(RFE)。
优点 :考虑特征之间的交互关系。
缺点 :计算成本高。
示例 :
RFE(Recursive Feature Elimination)
1
2
3
4
5
6
7
8 from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# 创建模型
model = LogisticRegression()
rfe = RFE(model, n_features_to_select=2)
X_new = rfe.fit_transform(X, y)
print("选择后的特征形状:", X_new.shape)
在模型训练过程中自动选择重要特征。
常用算法:Lasso 回归、树模型(如随机森林、XGBoost)。
优点 :结合了模型训练和特征选择。
缺点 :依赖于具体模型。
示例 :
Lasso 回归(基于 L1 正则化)
1 | from sklearn.linear_model import Lasso |
主成分分析(PCA)
将数据投影到方差最大的方向上。
优点 :线性变换,计算高效。
缺点 :仅适用于线性可分的数据。
1 | from sklearn.decomposition import PCA |
数据划分
分离特征和目标变量
1 | # 假设 'target' 是目标变量列名 |
数据划分
将数据划分为训练集和测试集
1 | X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
模型
sklearn 中的常用二分类模型代码示例
1 | from sklearn.linear_model import LogisticRegression |
模型标准化+训练+优化模版
1 | from sklearn.pipeline import Pipeline |
模型评估
准确率
准确率是指模型预测正确的样本占总样本的比例。
1 | from sklearn.metrics import accuracy_score |
混淆矩阵
混淆矩阵是一个表格,用于总结分类模型的预测结果。
常见术语:
TP(True Positive):正类正确预测为正类。
TN(True Negative):负类正确预测为负类。
FP(False Positive):负类错误预测为正类。
FN(False Negative):正类错误预测为负类。
1 | from sklearn.metrics import confusion_matrix |
召回率
召回率(也称灵敏度或 True Positive Rate)是指模型正确预测为正类的样本占实际正类的比例。
1 | from sklearn.metrics import recall_score |
精确率
精确率是指模型预测为正类的样本中实际为正类的比例。
适用场景
关注减少误报时使用(如推荐系统)。
1 | from sklearn.metrics import precision_score |
F1 分数
F1 分数是精确率和召回率的调和平均值,用于综合衡量模型性能。
适用场景
类别不平衡时使用。
1 | from sklearn.metrics import f1_score |
AUC
AUC 是 ROC 曲线下的面积,用于衡量模型区分正负类的能力。
范围:[0, 1],值越大表示模型性能越好。
适用场景
需要评估模型整体性能时使用。
1 | from sklearn.metrics import roc_auc_score |
均方误差 均方根误差 R² 决定系数
均方误差是预测值与真实值之间差值平方的平均值。
均方根误差是均方误差的平方根,用于将误差恢复到原始单位。
R² 决定系数衡量模型对数据的拟合程度,取值范围为 (−∞,1]。
1 | import numpy as np |
综合案例
1 | import pandas as pd |
- Title: 机器学习数据分析helper
- Author: 姜智浩
- Created at : 2025-04-07 11:45:14
- Updated at : 2025-06-05 21:30:32
- Link: https://super-213.github.io/zhihaojiang.github.io/2025/04/07/20250407机器学习数据分析helper/
- License: This work is licensed under CC BY-NC-SA 4.0.