机器学习:升维(Polynomial Regression)

本篇文章包含升维的基本概念以及代码演示部分

环境:Pycharm

一,升维

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)#将特征值升维,degree代表提升维度,include_bias添加偏置
    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()

运行结果

因为代码中我们将偏置置零,bias为0。

可以看到,w从一维拓展为二维。后面同理可得。

观察可得,随着维度上升,模型从欠拟合到合适拟合再到过拟合,下图可视化后更加明显。

由图可知,红色的曲线拟合得最好,而棕黄色的曲线过拟合。

相关推荐
weixin_307779137 小时前
基于AWS Lambda事件驱动架构与S3智能生命周期管理的制造数据自动化处理方案
人工智能·云计算·制造·aws
yumgpkpm7 小时前
CMP(类ClouderaCDP7.3(404次编译) )完全支持华为鲲鹏Aarch64(ARM)使用 AI 优化库存水平、配送路线的具体案例及说明
大数据·人工智能·hive·hadoop·机器学习·zookeeper·cloudera
cpq377 小时前
AI学习研究——KIMI对佛教四圣谛深度研究
人工智能·学习
丁浩6668 小时前
统计学---2.描述性统计-参数估计
人工智能·算法
国科安芯8 小时前
基于AS32A601型MCU芯片的屏幕驱动IC方案的技术研究
服务器·人工智能·单片机·嵌入式硬件·fpga开发
大千AI助手8 小时前
BPE(Byte Pair Encoding)详解:从基础原理到现代NLP应用
人工智能·自然语言处理·nlp·分词·bpe·大千ai助手·字节对编码
大千AI助手8 小时前
Megatron-LM张量并行详解:原理、实现与应用
人工智能·大模型·llm·transformer·模型训练·megatron-lm张量并行·大千ai助手
Cathy Bryant8 小时前
智能模型对齐(一致性)alignment
笔记·神经网络·机器学习·数学建模·transformer
DO_Community8 小时前
AI 推理 GPU 选型指南:从 A100 到 L40S 再看 RTX 4000 Ada
人工智能·aigc·ai编程·ai推理
iNBC8 小时前
AI基础概念-第一部分:核心名词与定义(二)
人工智能