机器学习模型——非线性回归
创作时间:
作者:
@小白创作中心
机器学习模型——非线性回归
引用
CSDN
1.
https://blog.csdn.net/qq_60688380/article/details/136968451
在机器学习中,非线性回归问题是一个常见的挑战。本文将介绍如何通过升维技术将非线性问题转换为线性问题,从而提高模型的预测能力。我们将通过多项式回归、深度学习中的噪音分离、矩阵乘法等方法,结合具体的Python代码示例,展示升维技术在处理非线性数据时的应用。
处理的思路:
将非线性问题转换为线性问题
方法:
升维
升维是一种常用的处理非线性问题的方法,它通过将原始数据从低维空间映射到高维空间来增强模型的表达能力。以下是升维的一些具体原理和方法:
多项式回归:这是一种常见的升维方法,通过将已有的特征进行相乘(包括特征与自身相乘),从而生成新的特征维度。例如,在一元多项式回归中,如果因变量y与自变量x的关系是非线性的,可以通过引入x的平方项、立方项等来构建新的特征,使得模型能够捕捉到数据的非线性关系。
分离噪音与有用信息:在深度学习中,升维还可以帮助分离噪音和有用的信息。通过增加维度,网络可以学习到不同特征的权重,从而提高有用信息的权重,降低噪音的权重,这有助于提取数据中的关键特征。
矩阵乘法:在某些情况下,如Embedding层,升维是通过矩阵乘法来实现的。这种方法可以将低维数据映射到高维空间,可能会放大某些特征或者将笼统的特征分开,从而改善模型的性能。
解决欠拟合问题:升维的一个主要目的是解决模型的欠拟合问题,即当模型因为考虑的因素较少而无法准确预测时,通过增加特征的复杂度来提高模型的准确率。
保持一致性:在进行升维操作时,需要确保对训练集、测试集和验证集的数据都进行相同的升维处理,以保持数据的一致性和模型的准确性。
升维里的degree设置的不易过大,否则容易造成维度灾难。
import numpy as np
import pandas as pd
# 数据范围 -3 3
X = 6 * np.random.random(100) - 3
y = 2 * X ** 2 + X + 3 + 5 * np.random.rand(100)
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X.reshape(-1, 1), y)
X_line = np.linspace(-3, 3, 5)
y_line = lr.predict(X_line.reshape(-1, 1))
import matplotlib.pyplot as plt
plt.scatter(X, y)
plt.plot(X_line, y_line, c='r')
plt.show()
我们可以看出,二维数据用一维直线很难去很好的拟合。所以我们进行升维
import numpy as np
import pandas as pd
# 数据范围 -3 3
X = 6 * np.random.random(100) - 3
y = 2 * X ** 2 + X + 3 + 5 * np.random.rand(100)
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X.reshape(-1, 1))
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_poly, y)
lst = [[1],
[3],
[5]]
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False)
ret = poly.fit_transform(lst)
print(ret)
# 从这个例子中我们可以看出,coef里的结果第一个时x的系数,第二个是x^2的系数
# 绘制折线图
X_line = np.linspace(-3, 3, 100)
print(lr.coef_) # 系数
print(lr.intercept_) # 偏置
y_line = X_line * lr.coef_[0] + X_line ** 2 * lr.coef_[1] + lr.intercept_ #用公式进行输出y_line的值,
import matplotlib.pyplot as plt
plt.scatter(X, y)
plt.plot(X_line, y_line, c='r')
plt.show()
升维后,拟合的线与原数据比较符合
热门推荐
沙特德国医院:科学应对肚子痛的专业指南
天安门和故宫:六百年沧桑巨变
武汉市人口新变化:增长背后的动力与挑战
人口流入助推武汉都市圈高质量发展
《日有所诵》第六版:用童诗开启孩子的语言之旅
张献忠宝藏:从传说走向现实的考古传奇
岷江新发现:张献忠沉银遗址再出万件珍宝
珠海博物馆:三日游中的文化宝藏
珠海三日游:长隆海洋王国VS圆明新园,现代与传统的完美碰撞
来自Vintage的15本个性化礼物推荐
乳胶床垫的正确使用与保养指南
致敬江北三名流:“垦牧精神展”走进连云港市博物馆
南塘老街:宁波夜生活的宝藏地!
从古至今:宁波美食文化的传承与创新
遇到衝突怎麼辦?
春风得意,立春送你最牛祝福!
3分14秒!《新闻联播》重点报道景德镇!
维生素B2和肌醇:拯救你的秀发!
维生素B族真的能缓解脱发焦虑吗?
华西医院泌尿外科:信息技术赋能精准医疗
送玫瑰花的寓意与意义(玫瑰花的象征与传达的情感)
珠海渔女与情侣路:一座城市的浪漫传奇
小茜带你玩转珠海四日游!
立春诗句中的绝美春景
打春牛:从千年古礼到现代传承
6个常用的保湿方法,让你皮肤越来越干
双十一必囤:宁波灰汁团,百年传承好味道!
在家自制宁波臭冬瓜,超简单!
房产传承税务规划:如何合法合规降低税费?
最新继承房产税务优惠大揭秘!