Почему мой показатель линейной регрессии такой низкий? - PullRequest
0 голосов
/ 07 октября 2019

Взял зачищать сайт Pgatour.com, где статистика регулярно обновляется. У них есть исторические данные, относящиеся к 2010 году, которые были собраны в плоский CSV-файл. Прочитайте это с помощью pd.read_csv (имя файла) успешно. Это скребок 2010-2019 гг.

SG_P    SG_T    SG_TTG  SG_OTT  SG_ATG  POINTS
7   0.243   1.195   0.952   0.338   0.168   718.0
8   0.098   1.192   1.091   0.724   0.260   445.0
9   -0.147  1.001   1.151   0.185   0.738   843.0
11  0.054   0.984   0.927   0.151   0.507   718.0
12  0.137   1.156   1.014   0.403   0.642   500.0

После реформирования нового фрейма данных, в котором я сохраняю только статистику «SG» или «Strokes-Gained», которые имеют нелинейную связь для информирования «очков» игрока в гольф, мывыполнил train_test_split 0,33% для тестовых данных. Целевая переменная - «ТОЧКИ».

В других запусках Kaggle этого проекта результаты обычно находятся в диапазоне точности 0,70.

Для прямой линейной регрессии от Scikitlearn, мои находятся в диапазоне .25-.30, что дает очень недостаточно данных, которые при построении с Seaborn показывают плохой результат.

training set r^2 score = 0.2601442196444287
testing set r^2 score = 0.2602966900574226

Линейныйкод регрессии выглядит следующим образом:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# Split features and target

X = df2.iloc[: ,:-1] # Get the features minus OWGR which is the target
y = df2.iloc[:,-1:]  # Just get the target

# Train test split

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.33,random_state=12)

lr = LinearRegression(n_jobs = -1,normalize=True)
lr.fit(X_train, y_train)

training set r^2 score = 0.2601442196444287
testing set r^2 score = 0.2602966900574226

Вот поли версия:

from sklearn.preprocessing import PolynomialFeatures

degree = 2 # Start with 2
poly = PolynomialFeatures(degree, include_bias=False)

X_poly = poly.fit_transform(X) # No longer a pandas dataframe
y_poly = y # Still a pandas dataframe

X_poly_train, X_poly_test, y_poly_train, y_poly_test = train_test_split(X_poly, y_poly, random_state=12)

lr_poly = LinearRegression()
lr_poly.fit(X_poly_train, y_poly_train)

training set r^2 score = 0.2902297270799855
testing set r^2 score = 0.1746156333412796

В блокноте тестов на Kaggle я видел результаты, подобные этому:

Линейный:

training set r^2 score = 0.5540673510136147
testing set r^2 score = 0.510807136771844

Поли:

training set r^2 score = 0.7466513181026075
testing set r^2 score = 0.6325248963195537

1 Ответ

0 голосов
/ 08 октября 2019

Предварительная обработка данных - действительно важный предыдущий шаг к обучению. На этом этапе данные преобразуются для уменьшения ненужной и избыточной информации, обработки недопустимых значений и т. Д. Некоторые операции, связанные с предварительной обработкой данных, могут включать обработку нулевых значений, уменьшение размерности данных, стандартизацию данных и т. Д. Без выполнения этого процесса вы можетев итоге получится мощный, хорошо продуманный классификатор, который плохо работает с вашими фактическими данными. Попробуйте, и, возможно, ваши результаты улучшатся!

...