[机器学习与scikit-learn-30]:算法-回归-普通线性模型拟合非线性分布数据-遇到的问题

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习与scikit-learn-30]:算法-回归-普通线性模型拟合非线性分布数据-遇到的问题相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123559005


目录

前言:

第1步骤:导入库

第2步骤:生成非线性分布数据集

第3步骤:创建普通线性模型并进行拟合

第4步骤:可视化拟合效果


前言:

文本通过代码展现普通的线性模型拟合非线性模型遇到的问题。

第1步骤:导入库

# 导入所需要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor

第2步骤:生成非线性分布数据集

# 创建需要拟合的非线性分布数据集
rnd = np.random.RandomState(42) #设置随机数种子

X = rnd.uniform(-3, 3, size=100) #random.uniform,从输入的任意两个整数中取出size个随机数

#生成y的思路:先使用NumPy中的函数生成一个sin函数图像,然后再人为添加噪音
y = np.sin(X) + rnd.normal(size=len(X)) / 3 #random.normal,生成size个服从正态分布的随机数

#使用散点图观察建立的数据集是什么样子
plt.scatter(X, y,marker='o',c='k',s=20)
plt.show()

#为后续建模做准备:sklearn只接受二维以上数组作为特征矩阵的输入
print(X.shape)
X = X.reshape(-1,1)
(100,)

第3步骤:创建普通线性模型并进行拟合

# 使用原始数据进行建模
#使用原始数据进行建模
# (1) 普通线性模型
LinearR = LinearRegression() # 创建模型
LinearR = LinearR.fit(X, y)  # 训练模型

# (2)决策树线性拟合模型  
TreeR = DecisionTreeRegressor(random_state=0)  # 创建模型
TreeR = TreeR.fit(X, y)  # 训练模型

第4步骤:可视化拟合效果

# 可是化拟合效果
#放置画布
fig, ax1 = plt.subplots(1)

#创建测试数据:一系列分布在横坐标上的点
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)

#将测试数据带入predict接口,获得模型的拟合效果并进行绘制
ax1.plot(line, LinearR.predict(line), linewidth=2, color='green',label="linear regression")
ax1.plot(line, TreeR.predict(line), linewidth=2, color='red', label="decision tree")

#将原数据上的拟合绘制在图像上
ax1.plot(X[:, 0], y, 'o', c='k')
#其他图形选项
ax1.legend(loc="best")
ax1.set_ylabel("Regression output")
ax1.set_xlabel("Input feature")
ax1.set_title("Result before discretization")
plt.tight_layout()
plt.show()

从上图可以看出:

(1)线性模型的效果非常糟糕,与数值真实分布的图形相差甚远。

(2)决策树的精度,取决于决策树的层数,层数分支越多,越容易过拟合。


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123559005

以上是关于[机器学习与scikit-learn-30]:算法-回归-普通线性模型拟合非线性分布数据-遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

包邮送书啦|《机器学习与深度学习算法基础》

机器学习机器学习入门02 - 数据拆分与测试&算法评价与调整

Python3入门机器学习 经典算法与应用

《分布式机器学习:算法理论与实践》——RE

Python3入门机器学习--经典算法与应用|Python3机器学习

从入门到精通:机器学习算法与应用