Почему моя модель линейной регрессии sklearn дает идеальные прогнозы? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь выполнить множественную линейную регрессию с помощью sklearn, и я выполнил следующие шаги. Однако, когда дело доходит до предсказания y_pred с использованием обученной модели, я получаю идеальное значение r ^ 2 = 1.0. Кто-нибудь знает, почему это так / что не так с моим кодом?

Также извините, я новичок в этом сайте, поэтому я не совсем в курсе форматирования / этикета вопросов!

import numpy as np
import pandas as pd

# Import and subset data
ml_data_all = pd.read_excel('C:/Users/User/Documents/RSEM/STADM/Coursework/Crime_SF/Machine_learning_collated_data.xlsx')
ml_data_1218 = ml_data_all[ml_data_all['Year'] >= 2012]

ml_data_1218.drop(columns=['Pop_MOE',
                               'Pop_density_MOE',
                                'Age_median_MOE',
                               'Sex_ratio_MOE',
                                'Income_median_household_MOE',
                               'Pop_total_pov_status_determ_MOE',
                                'Pop_total_50percent_pov_MOE',
                                'Pop_total_125percent_pov_MOE',
                               'Poverty_percent_below_MOE',
                                'Total_labourforceMOE',
                               'Unemployed_total_MOE',
                               'Unemployed_total_male_MOE'], inplace=True)

# Taking care of missing data
# Delete rows containing any NaNs
ml_data_1218.dropna(axis=0,
                   how='any',
                   inplace=True)

# DATA PREPROCESSING

# Defining X and y
X = ml_data_1218.drop(columns=['Year']).values
y = ml_data_1218['Burglaries '].values

# Encoding categorical data 
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

transformer = ColumnTransformer(transformers=[("cat", OneHotEncoder(), [0])], remainder='passthrough')
X = transformer.fit_transform(X)
X.toarray()
X = pd.DataFrame.sparse.from_spmatrix(X)

# Split into Training set and Test set
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)

# Feature scaling 
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train.iloc[:,149:] = sc_X.fit_transform(X_train.iloc[:,149:])
X_test.iloc[:,149:] = sc_X.transform(X_test.iloc[:,149:])

# Fitting multiple linear regression to training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

# Predicting test set results
y_pred = regressor.predict(X_test)

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

1 Ответ

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

Получается, что в конце концов это была глупая ошибка: я забыл отбросить зависимую переменную (кражи со взломом) из столбцов X, ха-ха, поэтому модель линейной регрессии делала точные предсказания. Сейчас это работает (r2 = 0,56). Спасибо всем!

...