问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习中的升维技术:从概念到实践

创作时间:
作者:
@小白创作中心

机器学习中的升维技术:从概念到实践

引用
CSDN
1.
https://blog.csdn.net/ma_no_lo/article/details/138211957

升维(Polynomial Regression)是机器学习中一种重要的技术手段,主要用于解决数据呈现非线性关系时的拟合问题。通过将低维数据映射到高维空间,可以更有效地分离混合在一起的样本点,从而提高模型的准确率。本文将详细介绍升维的基本概念,并通过Python代码演示如何实现多项式回归,帮助读者理解这一技术的核心原理和应用场景。

一、升维的基本概念

1. 概念

在低维空间中,我们往往难以对混合在一起的数据进行有效分类。即使强行拟合,最终训练出的模型也可能出现过拟合现象,导致效果不尽如人意。这时,我们可以通过某些算法将样本点投射到更高维度,以此来分开混合在一起的样本点。例如,可以将二维点群通过自生坐标(x1,y1)相乘(x1*y1)作为纵轴方向的分量,从而将点投射到三维空间中。这样,我们就可以用一个平面来划分样本点。

其中,SVM(支持向量机)算法就巧妙地利用了升维的特性。

2. 目的

升维的主要目的是为了解决欠拟合问题,即为了提高模型的预测准确率。当数据维度不足时,模型考虑的因素就会减少,导致预测结果不够精确。通过升维,我们可以增加模型考虑的因素,从而提高预测精度。

3. 多项式回归

多项式回归是升维的一种具体实现方式,它在机器学习中常被用作数据预处理手段。其核心思想是将已有的维度进行组合,以拓展新的维度。当数据呈现非线性关系,即y不随x线性变化时,继续使用多元线性回归模型的效果往往不尽如人意。对此,我们有两种应对方法:

  1. 使用非线性算法,比如回归树、神经网络等
  2. 将数据转换为线性关系

而升维就是将数据从非线性关系转变为线性关系的有效手段。假设数据集有两个维度x1和x2,使用多元线性回归模型时,表达式为y=w1x1+w2x2。当使用二阶多项式升维后,数据集将从原来的x1和x2拓展为x1、x2、x1^2、x2^2和x1*x2五个维度,同时将非线性数据转化为线性数据。

二、代码演示

下面通过Python代码演示如何实现多项式回归:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

np.random.seed(42)  # 固定随机种子,便于测试算法

m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 * X ** 2 + X + 2 + np.random.randn(m, 1)

# 分割数据集为训练集和测试集
X_train = X[:80]
y_train = y[:80]
X_test = X[80:]
y_test = y[80:]

plt.plot(X, y, 'b.')

d = {1: 'g-', 2: 'r+', 10: 'y*'}  # 键代表提升的维度,值为图像颜色

for i in d:
    poly_features = PolynomialFeatures(degree=i, include_bias=True)  # 将特征值升维
    X_poly_train = poly_features.fit_transform(X_train)
    X_poly_test = poly_features.fit_transform(X_test)

    lin_reg = LinearRegression(fit_intercept=False)
    lin_reg.fit(X_poly_train, y_train)

    print("{}-Dimension:".format(i))
    print("bias:", lin_reg.intercept_)
    print("w:", lin_reg.coef_)

    y_train_predict = lin_reg.predict(X_poly_train)
    y_test_predict = lin_reg.predict(X_poly_test)

    plt.plot(X_poly_train[:, 1], y_train_predict, d[i])  # 为了可视化,选择一个维度绘制

    print("Train_MSE:", mean_squared_error(y_train, y_train_predict))
    print("Test_MSE:", mean_squared_error(y_test, y_test_predict))
    print("Distance:", mean_squared_error(y_test, y_test_predict) - mean_squared_error(y_train, y_train_predict))
    print("---------------" * 10)

plt.show()

运行结果分析

由于代码中将偏置项设置为0,因此输出的bias值为0。随着维度的增加,权重系数w从一维扩展到二维,以此类推。

观察结果可以发现,随着维度的增加,模型从欠拟合逐渐过渡到合适拟合,最终可能过度拟合。下图直观展示了不同维度下的拟合效果:

由图可知,红色曲线(二次多项式)的拟合效果最佳,而黄色曲线(十次多项式)则出现了明显的过拟合现象。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号