机器学习:升维(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从一维拓展为二维。后面同理可得。

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

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

相关推荐
测开小菜鸟28 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
Power20246661 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k1 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
好奇龙猫1 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班1 小时前
复现LLM:带你从零认识语言模型
人工智能·语言模型
数据猎手小k1 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
YRr YRr1 小时前
深度学习:循环神经网络(RNN)详解
人工智能·rnn·深度学习
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
多吃轻食2 小时前
大模型微调技术 --> 脉络
人工智能·深度学习·神经网络·自然语言处理·embedding
萧鼎2 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步