Полиномиальная регрессия сортировки х - PullRequest
1 голос
/ 30 апреля 2020

После выполнения k-средних на моих данных и разделения моих наблюдений на различные кластеры я пытался построить график моей полиномиальной регрессии. Однако это довольно грязно, и не так, как я ожидал, что полиномиальная линия будет выглядеть. Я понимаю, что сортировка х, вероятно, поможет мне решить эту проблему. Но как мне отсортировать ось х? Я искал ответ, но я не нашел ничего, что могло бы мне помочь. Я новичок в python, и я уже несколько недель пытаюсь найти хороший сюжет, и это сводит меня с ума.

участок: enter image description here

код:

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()



1 Ответ

1 голос
/ 30 апреля 2020

Я не знаю, почему вы думаете, что полиномиальная регрессия имеет какое-либо значение для этих данных, но если вы хотите построить график ее результатов, имеет гораздо больше смысла прогнозировать относительно хорошего, равномерно распределенного набора точек вместо x_train. Попробуйте это вместо линии, которая отображает синюю линию:

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")
...