用matplotlib绘制二次函数/模型

2024-10-01 02:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在玩python,想用matplotlib绘制二次线性回归。问题是,我的绘图结果是很多连接的线/点,而不是一个函数:

Plot

Zoomed plot

通常我认为这是行向量与列向量的问题。但当我换位的时候似乎什么都没变。在

我的代码是:

from sklearn import datasets, linear_model
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Load diabetes dataset JSON
dsDiabetes = datasets.load_diabetes()

# Create feature- and outcome vectors
lin_train  = np.array(dsDiabetes.data[:, np.newaxis, 2])
quad_train = np.concatenate((lin_train, lin_train**2), axis=1)
outcome    = np.array(dsDiabetes.target)

# Create regression objects
lin_model = linear_model.LinearRegression()
quad_model = linear_model.LinearRegression()

# lin_train model
lin_model.fit(lin_train, outcome)
quad_model.fit(quad_train, outcome)

# Plot
plt.style.use('fivethirtyeight')
plt.scatter(lin_train, outcome, color='black')
# plt.plot(lin_train, quad_model.predict(quad_train))
# plt.plot(lin_train, lin_model.predict(lin_train), color='blue', linewidth=1)
plt.plot(lin_train, quad_model.predict(quad_train), color='red', linewidth=1)
plt.show()

我错过了什么?在


Tags: importmodelplotmatplotlibasnptrainplt
2条回答

你需要对你的价值观进行分类。你可以采取任何方法。就我个人而言,我只会使用pandas,但肯定有更多的轻量级解决方案。在

>>> df = pd.DataFrame({'x':lin_train.reshape((lin_train.shape[0],)), 'y':quad_model.predict(quad_train)})
>>> df.sort_values(by='x', inplace=True)
>>> plt.style.use('fivethirtyeight')
>>> plt.scatter(lin_train, outcome, color='black')
<matplotlib.collections.PathCollection object at 0x7f6bf2906590>
>>> # plt.plot(lin_train, quad_model.predict(quad_train))
... # plt.plot(lin_train, lin_model.predict(lin_train), color='blue', linewidth=1)
... plt.plot(df.x, df.y, color='red', linewidth=1)
[<matplotlib.lines.Line2D object at 0x7f6bf29069d0>]

enter image description here

据我所见,你的图上的x值不是按升序排序的。图中做了它应该做的,并连接了这些点,但它们的顺序是这样的:直线在x轴上“向后”和“向前”跳跃。现在-你在线性图上看不到,因为所有的东西都在一条直线上,但是在二次曲线上开始变得可见。如果根据升序的x值对用于直线的点进行排序,则应该这样做。在

相关问题 更多 >