какие должны быть параметры на участке остатка моря - PullRequest
2 голосов
/ 29 мая 2020

Я создал простую модель линейной регрессии:

LR = LinearRegression()
kfold = model_selection.KFold(n_splits=10, random_state=12)
result_kfold = model_selection.cross_val_score(LR, X_train, Y_train, cv=kfold, scoring = 'r2')
print("Accuracy: %.2f%%" % (result_kfold.mean()*100.0)) 
LR.fit(X_train,Y_train)
Y_pred = LR.predict(X_test)
print("Y_pred:", Y_pred)

Я хочу построить график остаточных ошибок. Для того же я использовал «остаток». Но я не уверен, что выдвинул правильные аргументы. Согласно документации, мы должны использовать переменную-предиктор и переменную результата / ответа. Вот код:

sns.set(style="whitegrid")
sns.residplot(Y_test, Y_pred, lowess=True, color="g")

Кто-нибудь, пожалуйста, скажите мне, правильно ли это ... также какие должны быть метки осей X и Y?

Заранее благодарю за помощь

1 Ответ

0 голосов
/ 29 мая 2020

Вы рисуете что-то очень странное, поэтому давайте воспользуемся примером набора данных:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import matplotlib. pyplot as plt
import seaborn as sns

iris = sns.load_dataset('iris')

X_train, X_test, Y_train, Y_test = train_test_split(iris.iloc[:,:3], iris.iloc[:,3],random_state=11)

LR = LinearRegression()
LR.fit(X_train,Y_train)
Y_pred = LR.predict(X_test)

Если вы просто хотите построить график остатков, вы можете:

sns.set(style="whitegrid")
fig, ax = plt.subplots(figsize =(5,5))
sns.regplot(x=Y_pred,y=Y_test-Y_pred,ax=ax,lowess=True)
ax.set(ylabel='residuals',xlabel='fitted values')

enter image description here

То, что вы получаете с sns.regplot (), - это переменная y, регрессирующая на переменную x, и строятся остатки, что не имеет смысла в вашем случае, и я иллюстрирую ниже, как получается график, сначала вы подбираете прогноз (переменная y) к фактическому (переменная x) и получаете остатки:

plotfit = LinearRegression()
plotfit.fit(Y_test.to_numpy().reshape(-1,1),Y_pred)
residual = Y_pred - plotfit.predict(Y_test.to_numpy().reshape(-1,1))

Затем построение графика дает вам то же самое, что и ваш sns. остаток:

sns.set(style="whitegrid")
fig, ax = plt.subplots(1,2,figsize =(10,5))

sns.residplot(Y_test,Y_pred,lowess=True, color="g",ax=ax[0])
ax[0].set_xlim(0,2.5)
sns.regplot(x=Y_test,y=residual,lowess=True)
ax[1].set_xlim(0,2.5)

enter image description here

...