【发布时间】: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_train与PolyReg.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