Форум сайта python.su
Добрый день. Написал программу, которая по данным из первого файла пытается предугадать данные из другого файла. Пример строки из файлов:
1;81.7474;1268.5;122.85;46.9;64.95;823.69;55.64;18.54;3;4;1.2;0.7;1045;915.68;890.54;12;35;36420
первые 17 столбцов признаки, 18 столбец желаемое значение.
По результатам тестирования у меня выдает такие данные:
Accuracy: 30535102968705.60%
Accuracy: 17282909.55%
Accuracy: 8681055.47%
Мб я где-то накосячил в программе? Или не до конца уловил механизм scikit-learn?
Пример программы:
import pandas as pd import xgboost as xgb from sklearn.metrics import confusion_matrix, mean_squared_error from sklearn.metrics import mean_absolute_error,mean_squared_error,median_absolute_error df = pd.read_csv('new_work_1.csv',";",header=None) X_train = df.drop(18,axis=1) Y_train = df[18] T_train_xgb = xgb.DMatrix(X_train, Y_train)# params = {"objective": "reg:linear", "booster":"gblinear"} gbm = xgb.train(dtrain=T_train_xgb,params=params) test_data = pd.read_csv('new_work_2.csv',";",header=None) #print(test_data) X_test = test_data.drop(18,axis=1) Y_test = test_data[18] Y_pred = gbm.predict(xgb.DMatrix(X_test)) test_erorr = mean_squared_error(Y_test,Y_pred); print("Accuracy: %.2f%%" % (test_erorr * 100.0)) accuracy = mean_absolute_error(Y_test,Y_pred) print("Accuracy: %.2f%%" % (accuracy * 100.0)) accuracy2 = median_absolute_error(Y_test, Y_pred) print("Accuracy: %.2f%%" % (accuracy2 * 100.0))
Отредактировано kordDem (Май 19, 2017 14:44:25)
Офлайн
1. Accuracy это метрика не для регрессии, а классификации. и найти её можно:
from sklearn.metrics import accuracy_score
Отредактировано noob_saibot (Май 22, 2017 07:08:47)
Офлайн
1) Да знаю, просто пытался хоть сколько-нибудь похожие на правду результаты получить.
Скидываю ссылки на файлики
https://yadi.sk/d/_x3P3NLJ3JPmBR
https://yadi.sk/d/EMTemyU_3JPmBz
Данные получившиеся на тренировочном сете, такое ощущение что надо не линейную регрессию, а что-то другое
14770.64453125 16676.65234375 18582.65234375 20488.66015625
22394.66796875 24300.67578125 26206.68359375 28112.6953125
30018.69921875 31924.69921875 33830.70703125 35736.71484375
37642.72265625 39548.72265625 41454.73828125 43360.73828125
45266.7421875 47172.7578125 49078.7578125 50984.7578125
52890.7734375 54796.7734375 56702.7890625 58608.7890625
60514.7890625 62420.8046875 64326.8203125 66232.8203125
68138.8203125 70044.828125 71950.828125 73856.84375
75762.84375 77668.84375 79574.859375 81480.859375
83386.875 85292.875 87198.875 89104.890625
91010.90625 92916.90625 94822.90625 96728.90625
98634.921875 100540.9375 102446.9453125 104352.953125
106258.953125 108164.96875 110070.984375 111976.984375
113882.984375 115789. 117695. 119601.015625
121507.015625 123413.015625 125319.03125 127225.046875
129131.046875 131037.046875 132943.046875 134849.046875
136755.078125 138661.078125 140567.078125 142473.078125
144379.078125 146285.109375 148191.109375 150097.109375
152003.109375 153909.109375 155815.140625 157721.140625
159627.125 161533.125 163439.125 165345.15625
167251.171875 169157.171875 171063.171875 172969.171875
174875.203125 176781.203125 178687.203125 180593.203125
182499.234375 184405.234375 186311.25 188217.28125
190123.28125 192029.28125 193935.28125 195841.28125
197747.28125 199653.28125
Отредактировано kordDem (Май 22, 2017 14:10:53)
Офлайн
Немного поменял код Решил попробовать класс regressor. Подскажите насколько адекватны стали значения и какие еще параметры можно попробовать улучшить
import xgboost as xgb import pandas as pd import numpy as np from sklearn.metrics import confusion_matrix, mean_squared_error from sklearn.datasets import load_iris, load_digits, load_boston from sklearn.metrics import mean_absolute_error,mean_squared_error,median_absolute_error, accuracy_score rng = np.random.RandomState(31337) print("Boston Housing: regression") df = pd.read_csv('new_work_1.csv',";",header=None) X_train = df.drop(18,axis=1) Y_train = df[18] test_data = pd.read_csv('new_work_2.csv',";",header=None) #print(test_data) X_test = test_data.drop(18,axis=1) Y_test = test_data[18] xgb_model = xgb.XGBRegressor(max_depth=2, learning_rate=0.6, n_estimators=800) cl = xgb_model.fit(X_train,Y_train) predictions = cl.predict(X_test) actuals = Y_test print(mean_absolute_error(actuals, predictions)) print(mean_squared_error(actuals, predictions)) print(median_absolute_error(actuals, predictions)) print("============================")
Отредактировано kordDem (Май 26, 2017 11:39:13)
Офлайн
1. Было
kordDemВы не изменили алгоритм регрессии (за исключением глубины деревьев, их количества и lr), так как эти значения и были дефолтными:
params = {“objective”: “reg:linear”, “booster”:“gblinear”}
from sklearn.ensemble import ExtraTreesRegressor import pandas as pd import seaborn import matplotlib.pyplot as plt from sklearn.metrics import mean_absolute_error,mean_squared_error,median_absolute_error print("Boston Housing: regression") df = pd.read_csv('new_work_1.csv',";",header=None) df_test = df[284000:] df = df[:284000] X_train = df.drop(18, axis=1) Y_train = df[18] X_test = df_test.drop(18, axis=1) Y_test = df_test[18] model = ExtraTreesRegressor() cl = model.fit(X_train, Y_train) predictions = pd.Series(cl.predict(X_test)) actuals = Y_test.reset_index(drop=True) seaborn.set_style() df_rs = pd.concat([predictions, actuals], axis=1) df_rs.plot(subplots=True) print(mean_absolute_error(actuals, predictions)) print(mean_squared_error(actuals, predictions)) print(median_absolute_error(actuals, predictions)) plt.show()
Отредактировано noob_saibot (Май 26, 2017 13:39:51)
Офлайн