1. 数据加载 (Data Loading)
目的:将原始数据加载到Python环境中,准备进行分析和处理
常用方法:
python
# 从CSV文件加载
import pandas as pd
data = pd.read_csv('dataset.csv')
# Scikit-learn内置数据集
from sklearn import datasets
iris = datasets.load_iris() # 加载鸢尾花数据集
digits = datasets.load_digits() # 加载手写数字数据集
# 其他格式
# data = pd.read_excel('dataset.xlsx') # Excel文件
# data = pd.read_json('dataset.json') # JSON文件
关键点:
- 检查数据是否加载正确:
data.head()
,data.shape
- 了解数据的基本结构:特征、标签的分布
2. 数据探索 (Exploratory Data Analysis, EDA)
目的:理解数据特征、发现模式、识别问题
常用操作:
python
# 基本统计信息
print(data.describe())
# 检查缺失值
print(data.isnull().sum())
# 可视化探索
import matplotlib.pyplot as plt
import seaborn as sns
# 特征分布直方图
data.hist(figsize=(12, 8))
plt.show()
# 特征间关系
sns.pairplot(data, hue='target_column') # 分类问题时特别有用
plt.show()
关键点:
- 识别异常值、缺失值
- 理解特征之间的关系
- 发现数据不平衡等问题
3. 数据划分 (Data Splitting)
目的:将数据分为训练集和测试集,有时还包括验证集
常用方法:
python
from sklearn.model_selection import train_test_split
# 假设X是特征,y是标签
X = data.drop('target_column', axis=1) # 特征
y = data['target_column'] # 标签
# 划分数据集 (80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42 # 随机种子确保可重复性
)
关键点:
- 保持数据分布一致性(使用
stratify=y
处理不平衡数据) - 测试集大小通常为20-30%
- 随机种子(random_state)确保结果可重现
4. 数据预处理 (Data Preprocessing)
目的:将原始数据转换为更适合机器学习模型的格式
常见操作:
特征缩放
python
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler() # 标准化 (均值0,方差1)
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # 注意:使用训练集的参数转换测试集
处理缺失值
python
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean') # 也可以用'median'或'most_frequent'
X_train_imputed = imputer.fit_transform(X_train)
X_test_imputed = imputer.transform(X_test)
分类特征编码
python
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(handle_unknown='ignore')
X_train_encoded = encoder.fit_transform(X_train[categorical_cols])
X_test_encoded = encoder.transform(X_test[categorical_cols])
关键点:
- 所有预处理都应先拟合(fit)训练数据,然后转换(transform)测试数据
- 预处理步骤可以组合使用Pipeline
5. 模型训练 (Model Training)
目的:使用训练数据学习特征与标签之间的关系
基本模式:
python
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
# 创建模型实例
model = LogisticRegression()
# 或 model = RandomForestClassifier(n_estimators=100)
# 训练模型
model.fit(X_train_preprocessed, y_train)
关键点:
- 不同算法有不同的超参数需要设置
- 训练前确保数据已经正确预处理
- 可以使用交叉验证评估训练效果
6. 模型评估 (Model Evaluation)
目的:评估模型在未见过的数据上的表现
常用方法:
分类问题
python
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix, classification_report
y_pred = model.predict(X_test_preprocessed)
# 准确率
print("Accuracy:", accuracy_score(y_test, y_pred))
# 混淆矩阵
print(confusion_matrix(y_test, y_pred))
# 分类报告
print(classification_report(y_test, y_pred))
回归问题
python
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
y_pred = model.predict(X_test_preprocessed)
print("MSE:", mean_squared_error(y_test, y_pred))
print("R² Score:", r2_score(y_test, y_pred))
关键点:
- 永远在测试集上评估最终模型性能
- 根据问题类型选择合适的评估指标
- 好的模型应该在训练集和测试集上表现均衡
完整示例流程(鸢尾花数据集)
python
# 1. 加载数据
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
# 2. 数据探索
print("特征名称:", iris.feature_names)
print("类别名称:", iris.target_names)
print("数据形状:", X.shape)
# 3. 数据划分
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, random_state=42)
# 4. 数据预处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 5. 模型训练
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(max_iter=200)
model.fit(X_train_scaled, y_train)
# 6. 模型评估
from sklearn.metrics import classification_report
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))
这个流程是机器学习项目的基础框架。随着你的进步,你会学习到更高级的技术,如特征工程、超参数调优、模型集成等,但这些都是在掌握了这个基本流程之后的事情。