运行第一个机器学习模型 - Some-soda

运行第一个机器学习模型

0.说明

本文为机器学习视频的整理稿,只整理了简洁的文稿。


运行第一个机器学习模型

机器学习(Machine Learning,ML)正逐步成为软件开发和数据分析的重要组成部分。对于初学者而言,第一步通常是理解机器学习的基本概念,并实践构建一个完整可运行的模型。

1. 机器学习基础概念

在构建第一个模型之前,我们需要理解一些基础概念。

1.1 监督学习与非监督学习

机器学习可分为两大类:

  • **监督学习(Supervised Learning)****:模型基于带标签的数据进行训练,如分类任务(识别猫狗)和回归任务(预测房价)。
  • 非监督学习(Unsupervised Learning):模型在没有标签的数据上寻找模式,如聚类(K-Means)和降维(PCA)。

本次示例使用 监督学习,目标是基于手工创建的数据训练一个回归模型。

1.2 机器学习建模流程

完整的机器学习模型训练通常包含以下步骤:

  1. 数据收集:获取或生成数据。
  2. 数据预处理:清理、转换数据,使其适用于模型。
  3. 特征工程:提取对模型有用的特征。
  4. 模型选择:选择合适的算法(如线性回归、决策树、神经网络等)。
  5. 模型训练:使用训练数据拟合模型。
  6. 模型评估:使用测试数据评估模型性能。
  7. 优化与调整:调整超参数、改进模型。

接下来,我们将从数据准备开始,构建一个完整的机器学习项目。

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 构建了一个完整的回归模型。核心步骤包括:

  • 生成模拟数据
  • 数据预处理与拆分
  • 选择线性回归模型并训练
  • 评估与优化模型