Взял зачищать сайт 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