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

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

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

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

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

升维(Polynomial Regression)是机器学习中一种重要的技术手段,主要用于解决数据的非线性关系问题。通过将低维数据映射到高维空间,可以更有效地进行数据分类和预测。本文将从概念、目的和具体实现三个方面详细介绍升维技术,并通过代码演示其在实际应用中的效果。

一、升维

1. 概念

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

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

2. 目的

升维的主要目的是为了解决欠拟合问题,提高模型的预测准确率。当数据维度不足时,模型考虑的因素就会减少,导致预测结果不够精确。通过升维,可以增加模型的表达能力,使其更好地拟合数据。

3. 多项式回归

多项式回归是升维的一种具体实现方式,它通常被视作机器学习中的数据预处理手段。其主要目的是通过组合已有的维度来拓展新的维度。当数据呈现非线性关系时,继续使用多元线性回归模型的效果往往不佳。对此,我们有两种应对方法:

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

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

二、代码演示

下面通过一个具体的代码示例来演示升维技术的应用:

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号