График полиномиальной регрессии не отображается правильно - PullRequest
1 голос
/ 14 апреля 2020

Я запускаю этот код для полиномиальной регрессии, используя sklearn, но мой график не соответствует ожиданиям. Как вы можете видеть здесь я не получаю плавную линию, но она прыгает из одной точки в другую. Из моего понимания я должен отсортировать X, но когда я делаю это, все, что я получаю, это пустой график с линейной линией.

import operator
import numpy as np
from sklearn.cluster import KMeans
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.metrics import mean_squared_error, r2_score
import statsmodels.formula.api as smf

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=3, max_iter=100)
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[0].tolist())]
X = df0[['Age', 'Annual Income (k$)']]
Y = df0['Spending Score (1-100)']




poly_reg = PolynomialFeatures(degree=2)
X_poly = poly_reg.fit_transform(X)

model = LinearRegression()
model.fit(X_poly, Y)
y_poly_pred = model.predict(X_poly)


r2 = r2_score(Y,y_poly_pred)
print(r2)
model = make_pipeline(PolynomialFeatures(degree=2), LinearRegression(fit_intercept = False))
model.fit(X,Y)


plt.scatter(X.iloc[:, 1], Y, color='red')

plt.plot(X, Y, color='blue')
plt.xlabel('Age. Annual income')
plt.ylabel('Spending Score')
plt.show()



1 Ответ

0 голосов
/ 14 апреля 2020

TLDR; данные не являются линейно-зависимыми.

Причина, по которой график стал настолько запутанным, заключается в том, что вы нанесли на карту X (данные поезда) с Y (данные прогноза фактические ) и тот факт, что вы строили эти данные в то время, когда:

данные были грязными и не имели линейной зависимости , сделали результат этого грязного графика.

Я предлагаю вам :

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

.

plt.scatter(X, Y)
plt.plot(X, Y_pred, color='red')
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...