运行第一个机器学习模型
0.说明
本文为机器学习视频的整理稿,只整理了简洁的文稿。
运行第一个机器学习模型
机器学习(Machine Learning,ML)正逐步成为软件开发和数据分析的重要组成部分。对于初学者而言,第一步通常是理解机器学习的基本概念,并实践构建一个完整可运行的模型。
1. 机器学习基础概念
在构建第一个模型之前,我们需要理解一些基础概念。
1.1 监督学习与非监督学习
机器学习可分为两大类:
- **监督学习(Supervised Learning)****:模型基于带标签的数据进行训练,如分类任务(识别猫狗)和回归任务(预测房价)。
- 非监督学习(Unsupervised Learning):模型在没有标签的数据上寻找模式,如聚类(K-Means)和降维(PCA)。
本次示例使用 监督学习,目标是基于手工创建的数据训练一个回归模型。
1.2 机器学习建模流程
完整的机器学习模型训练通常包含以下步骤:
- 数据收集:获取或生成数据。
- 数据预处理:清理、转换数据,使其适用于模型。
- 特征工程:提取对模型有用的特征。
- 模型选择:选择合适的算法(如线性回归、决策树、神经网络等)。
- 模型训练:使用训练数据拟合模型。
- 模型评估:使用测试数据评估模型性能。
- 优化与调整:调整超参数、改进模型。
接下来,我们将从数据准备开始,构建一个完整的机器学习项目。
2. 数据准备与生成
在实际应用中,我们通常从数据库、CSV文件或API获取数据。但在学习阶段,我们可以手动创建数据。
2.1 生成模拟数据
我们创建一个简单的线性回归数据集,目标是预测 y
,其计算方式如下:
其中y=3x+7+ϵ y = 3x + 7 + \epsilon,ϵ\epsilon 是随机噪声。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成数据
np.random.seed(42)
x = np.random.rand(100, 1) * 10 # 生成 100 个 0-10 之间的随机数
y = 3 * x + 7 + np.random.randn(100, 1) * 2 # 线性关系 + 噪声
# 转换为 DataFrame
df = pd.DataFrame({'x': x.flatten(), 'y': y.flatten()})
print(df.head())
# 数据可视化
plt.scatter(x, y, label='Generated Data')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
此代码生成了100个随机数据点,并绘制数据分布图。
3. 数据预处理与特征工程
在实际应用中,数据通常需要清理,例如:
- 处理缺失值
- 标准化数值特征
- 转换类别特征(如独热编码 One-Hot Encoding)
在本示例中,数据已经是干净的,因此只需拆分数据集。
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. 训练第一个模型
4.1 选择模型
由于数据具有线性关系,我们使用 线性回归(Linear Regression) 进行建模。
from sklearn.linear_model import LinearRegression
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
4.2 预测与评估
训练完成后,我们使用测试数据评估模型。
from sklearn.metrics import mean_squared_error, r2_score
# 预测
y_pred = model.predict(X_test)
# 计算误差
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'MSE: {mse:.2f}')
print(f'R² Score: {r2:.2f}')
4.3 结果可视化
plt.scatter(X_test, y_test, label='Actual')
plt.scatter(X_test, y_pred, label='Predicted', color='red')
plt.plot(X_test, y_pred, color='green', linewidth=2)
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
5. 超参数优化与模型改进
尽管本示例是线性模型,但在更复杂的任务中,我们可以:
- 尝试不同的模型(如决策树、随机森林、神经网络)
- 调整超参数(如学习率、正则化参数)
- 增加数据特征(如多项式特征)
例如,使用 多项式回归 来拟合更复杂的关系:
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
poly_model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression())
poly_model.fit(X_train, y_train)
y_poly_pred = poly_model.predict(X_test)
print(f'New MSE: {mean_squared_error(y_test, y_poly_pred):.2f}')
print(f'New R² Score: {r2_score(y_test, y_poly_pred):.2f}')
6. 总结
本文从零开始介绍了机器学习的基础知识,并通过 Python 构建了一个完整的回归模型。核心步骤包括:
- 生成模拟数据
- 数据预处理与拆分
- 选择线性回归模型并训练
- 评估与优化模型