Почему моя модель линейной регрессии Scikit-Learn работает только для определенных случайных состояний? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь запустить модель линейной регрессии с машинным обучением для прогнозирования оценки различных виски, используя этот набор данных: https://whiskyanalysis.com/index.php/database/

Когда я использую метод разделения поезда / теста, я могу указать случайное состояние. Если я указываю определенные состояния ramdon (например, random_state = 3), модель ведет себя как намерение, и прогнозы находятся в ожидаемых диапазонах (~ 8.0). Для некоторых других чисел random_state (например, random_state = 2) модель дает сбой и делает несколько прогнозов, которые далеки от ожидаемых значений (многие степени 10 неверны!)

Я затрудняюсь объяснить это поведение.

Я использую sckit-learn v20.0 в Anaconda Navigator 1.9.2, Python 3.6.5.

Заранее спасибо за любую помощь - вот мой код:

import pandas as pd
import numpy as np

df = pd.read_csv('whisky_analysis.csv')
df.head()

#get rid of the spaces!
df.rename(columns={'Meta Critic':'Score','Super Cluster':'Super_Cluster'}, inplace=True)

# replace special character $ with £ 
df.Cost = df.Cost.str.replace('$','£')

df.shape

df.isna().sum()

# Drop the 'Whisky', 'STDEV' and # columns
# Drop 'Cluster' and 'Super_Cluster' due to large numbers of NaN  
df = df.drop(['Whisky', 'STDEV', '#', 'Super_Cluster', 'Cluster'], axis=1)

# drop any remaining rows with NaNs
df = df.dropna()

#Use one hot encoding to vectorise the categorical variables - we will use pandas' get_dummies 
df1 = pd.get_dummies(df, columns = ['Cost', 'Type', 'Class','Country'])

# get target and feature vector/matrix
y = df1.pop('Score')
y.shape
X = df1
X.shape

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 2)

from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(X_train, y_train)
preds = reg.predict(X_test)

preds

# evaluating performance
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test, preds)

from sklearn.metrics import r2_score
r2_score(y_test, preds)
...