【问题标题】:Polynomial regression sorting x多项式回归排序 x
【发布时间】:2020-08-15 03:17:41
【问题描述】:

在对我的数据运行 k-means 并将我的观察结果划分为不同的集群之后,我一直在尝试绘制我的多项式回归。然而,它非常混乱,而不是我期望多项式线的样子。我知道排序 x 可能会帮助我解决这个问题。但是我如何对 x 轴进行排序?我一直在寻找答案,但没有找到任何可以帮助我的东西。我是 python 的新手,几周来我一直在努力寻找一个好的情节,这让我发疯了。

情节:

代码:

import numpy as np
from sklearn.cluster import KMeans
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
import pandas as pd
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt

df = pd.read_csv('D:\Mall_Customers.csv', usecols = ['Age', 'Annual Income (k$)','Spending Score (1-100)'])


x = StandardScaler().fit_transform(df)


kmeans = KMeans(n_clusters=5, max_iter=100, random_state=0)
y_kmeans= kmeans.fit_predict(x)

mydict = {i: np.where(kmeans.labels_ == i)[0] for i in range(kmeans.n_clusters)}

dictlist = []
for key, value in mydict.items():
    temp = [key,value]
    dictlist.append(temp)

df0 = df[df.index.isin(mydict[2].tolist())]
X = df0[['Age', 'Annual Income (k$)',]]
Y = df0['Spending Score (1-100)']



from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state=0)

poly_reg = PolynomialFeatures()
X_polynom = poly_reg.fit_transform(x_train)

PolyReg = LinearRegression()
PolyReg.fit(X_polynom, y_train)


plt.scatter(x_train.iloc[:, 1], y_train, color='red')

plt.plot(x_train, PolyReg.predict(poly_reg.fit_transform(x_train)),   color='blue')
plt.xlabel('Age. Annual income')
plt.ylabel('Spending Score')
plt.show()



【问题讨论】:

  • x_trainPolyReg.predict(poly_reg.fit_transform(x_train)) 对比是没有意义的。而是尝试针对PolyReg.predict(poly_reg.fit_transform(np.arange(40,80)) 绘制类似np.arange(40,80) 的内容。这比在任意未排序的点上回归,然后再排序更有意义。只需在涵盖您的域的良好排序点上回归。
  • 但是话说回来,看看你的数据(红点),它们真的看起来像多项式回归可以帮助你吗?你打算如何处理结果?
  • 对于一个项目来说,要求之一是展示不同类型的回归,并展示哪一个最好。起初尝试线性,显然我的数据根本不是线性的。现在尝试多项式,但我发现它不会有太大帮助。所以你是说在我绘制它们之前对我的观点进行排序?我该怎么做呢?
  • 不,要非常清楚,您绝对不应该在绘制点之前对它们进行排序!
  • 我的意思是,当您进行预测时,只需预测np.arange 给出的均匀范围内的点即可。如果你想要一个线图,不要预测x_train

标签: python scikit-learn regression


【解决方案1】:

我不知道为什么您会认为多项式回归对这些数据进行了任何业务,但是如果您想绘制其结果,则根据一组漂亮、均匀分布的点而不是 @ 进行预测会更有意义987654321@。试试这个而不是绘制蓝线的线:

x_reg_line = np.arange(40, 80)[:, None]
y_reg_line = PolyReg.predict(x_reg_line) # Don't fit again here! You have already fit your model earlier!
plt.plot(x_reg_line, y_reg_line, color="blue")

【讨论】:

  • 首先感谢您帮助我!现在,当我尝试这个时,我得到了错误Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) 还有哪种回归类型最适合这个数据?
  • 无 - 您的数据中显然没有任何关系。该错误消息从字面上告诉您修复...查看我的编辑
猜你喜欢
  • 1970-01-01
  • 2011-04-23
  • 2019-01-24
  • 2021-06-19
  • 2021-06-03
  • 2020-01-07
  • 2023-03-03
  • 1970-01-01
  • 2018-12-19
相关资源
最近更新 更多