13.3 机器学习基础实战
NumPy机器学习实战教程:线性回归、特征处理与房价预测/鸢尾花分类
本教程详细讲解如何使用NumPy库实现机器学习基础实战,包括线性回归模型的最小二乘法实现、特征矩阵处理与维度压缩技术,并通过房价预测和鸢尾花分类的实战示例,帮助新手快速掌握NumPy在机器学习中的应用。
NumPy机器学习实战教程
1. 引言
NumPy是Python中用于科学计算的核心库,特别适用于处理多维数组和矩阵操作。在机器学习中,NumPy常用于数据预处理、模型实现和计算优化。本教程将逐步引导您使用NumPy实现机器学习基础任务,适合初学者学习。
2. 机器学习基础实战
在开始高级模型前,我们先熟悉NumPy的基本操作。NumPy提供了高效的数据结构(如ndarray)和数学函数,适用于机器学习数据流。
2.1 数据加载与预处理
使用NumPy可以轻松加载和处理数据。例如,假设我们有一个CSV文件,可以使用numpy.loadtxt或结合Pandas加载数据。
import numpy as np
# 加载数据示例
# 假设data.csv包含特征矩阵
# 使用loadtxt加载
# data = np.loadtxt('data.csv', delimiter=',')
# 为了演示,创建一个示例数据集
X = np.array([[1, 2], [2, 3], [3, 4]]) # 特征矩阵
Y = np.array([2, 3, 4]) # 目标值(如房价)
print("特征矩阵 X:")
print(X)
print("目标值 Y:")
print(Y)
2.2 基本数学操作
NumPy支持向量化操作,可加速计算。例如,计算均值、标准差或矩阵乘法。
# 计算均值和标准差
mean_X = np.mean(X, axis=0)
std_X = np.std(X, axis=0)
print("特征均值:", mean_X)
print("特征标准差:", std_X)
# 标准化特征(可选预处理步骤)
X_standardized = (X - mean_X) / std_X
print("标准化后特征:")
print(X_standardized)
3. 线性回归模型实现(最小二乘法)
线性回归是机器学习中的基础模型,最小二乘法是一种经典求解方法。我们将用NumPy实现。
3.1 线性回归理论
线性回归假设目标变量Y与特征X之间存在线性关系:Y = Xβ + ε,其中β是系数向量。最小二乘法通过最小化残差平方和来估计β。
3.2 最小二乘法数学
公式:β = (X^T X)^{-1} X^T Y,其中X是特征矩阵(包含截距项),Y是目标向量。
3.3 NumPy实现代码
我们将实现一个简单的线性回归模型。
# 添加截距项到X
X_with_intercept = np.c_[np.ones(X.shape[0]), X] # 添加一列全1作为截距
print("带截距的特征矩阵:")
print(X_with_intercept)
# 计算系数β使用最小二乘法
beta = np.linalg.inv(X_with_intercept.T @ X_with_intercept) @ X_with_intercept.T @ Y
print("系数β:", beta)
# 预测函数
def predict(X_new):
X_new_with_intercept = np.c_[np.ones(X_new.shape[0]), X_new]
return X_new_with_intercept @ beta
# 测试预测
new_X = np.array([[4, 5]])
predicted_Y = predict(new_X)
print("预测值:", predicted_Y)
4. 特征矩阵处理与维度压缩
在机器学习中,特征处理很重要,维度压缩可以减少计算复杂度和过拟合风险。
4.1 特征矩阵操作
使用NumPy进行特征缩放、归一化等。
# 特征缩放示例:最小-最大缩放
min_val = X.min(axis=0)
max_val = X.max(axis=0)
X_scaled = (X - min_val) / (max_val - min_val)
print("缩放后特征:")
print(X_scaled)
4.2 维度压缩技术(主成分分析PCA)
PCA是一种常见的降维方法。我们可以用NumPy实现简单PCA。
# 使用NumPy实现PCA示例
# 假设X是标准化后的特征矩阵
X_centered = X_standardized - np.mean(X_standardized, axis=0) # 中心化(已标准化,但可选)
cov_matrix = np.cov(X_centered, rowvar=False) # 计算协方差矩阵
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) # 特征分解
# 选择主成分(例如前k个最大特征值对应特征向量)
k = 1 # 假设降到1维
idx = eigenvalues.argsort()[::-1] # 降序排列索引
eigenvectors_sorted = eigenvectors[:, idx]
X_pca = X_centered @ eigenvectors_sorted[:, :k]
print("PCA降维后特征(前1个主成分):")
print(X_pca)
5. 实战:房价预测
我们将使用一个简单数据集演示房价预测(回归问题)。
5.1 数据集介绍
假设数据包含特征如房屋面积、卧室数量,目标为房价。使用模拟数据。
# 模拟房价数据
np.random.seed(42) # 确保可重复性
n_samples = 100
features = np.random.randn(n_samples, 2) # 两个特征
# 生成目标值:线性关系加噪声
true_beta = np.array([2, 3, 1]) # 截距和两个特征系数
X_house = np.c_[np.ones(n_samples), features]
Y_house = X_house @ true_beta + np.random.randn(n_samples) * 0.5 # 添加噪声
print("房价数据形状:")
print("X:", X_house.shape, "Y:", Y_house.shape)
5.2 模型实现与评估
应用线性回归模型。
# 使用最小二乘法训练模型
beta_house = np.linalg.inv(X_house.T @ X_house) @ X_house.T @ Y_house
print("学习到的系数:", beta_house)
# 预测和评估
predictions = X_house @ beta_house
mse = np.mean((Y_house - predictions) ** 2)
print("均方误差 (MSE):", mse)
6. 实战:鸢尾花分类
鸢尾花数据集是经典分类问题,我们将实现一个简化版本使用线性判别分析或类似方法,但重点在NumPy操作。
6.1 数据集介绍
使用NumPy加载内置数据集或模拟。这里用模拟数据。
# 模拟鸢尾花数据(3类,4个特征)
n_samples = 150
n_features = 4
n_classes = 3
X_iris = np.random.randn(n_samples, n_features) # 随机特征
Y_iris = np.random.randint(0, n_classes, n_samples) # 随机标签(0,1,2)
print("鸢尾花数据形状:")
print("X:", X_iris.shape, "Y:", Y_iris.shape)
6.2 分类模型实现
使用简单线性分类器,如逻辑回归的简化版本(这里用线性回归作为基础)。实际上,分类常用其他方法,但为演示NumPy,我们使用线性回归的扩展。
# 对于分类,将标签转换为one-hot编码
from sklearn.preprocessing import LabelBinarizer # 为了简便,使用sklearn的one-hot编码
# 或者用NumPy实现
lb = LabelBinarizer()
Y_iris_onehot = lb.fit_transform(Y_iris) # 转换为one-hot
# 用线性回归作为多分类基线(不是最优,但演示用)
X_iris_with_intercept = np.c_[np.ones(n_samples), X_iris]
beta_iris = np.linalg.inv(X_iris_with_intercept.T @ X_iris_with_intercept) @ X_iris_with_intercept.T @ Y_iris_onehot
print("分类系数形状:", beta_iris.shape)
# 预测(选择最大概率类)
predictions_onehot = X_iris_with_intercept @ beta_iris
predicted_classes = np.argmax(predictions_onehot, axis=1)
accuracy = np.mean(predicted_classes == Y_iris)
print("分类准确率:", accuracy)
7. 总结
本教程覆盖了NumPy在机器学习中的关键应用:从基础数据操作到线性回归模型实现、特征处理,并通过实战例子巩固理解。NumPy的高效数组操作是机器学习的基础,建议练习更多项目来提升技能。希望这个教程对您的学习有所帮助!