Тематическое исследование с линейным деревом решений, Random Forest, SVR и градиентным регрессором повышения
Когда мы говорим о рыночной стоимости футболиста, мы ссылаемся на оценку в денежном выражении ценности игрока в мире футбола. Эта сумма, как правило, то, что клуб игрока готов принять, чтобы продать или перевести контракт игрока в другой клуб. Способность предсказать рыночную стоимость футболиста может дать коммерческое преимущество Drosher Club, поскольку небольшая подмножество футболистов является ценным
В этой статье я подробно описываю шаги, используемые для прогнозирования рыночной стоимости игрока с использованием некоторого общего алгоритма регрессии машинного обучения в Python
Получите набор данных
Используемый набор данных можно загрузить из https://www.kaggle.com/karangadiya/fifa19
Предпосылка
Убедитесь, что у вас установлено следующее на вашей машине
- Питон
- Numpy
- Панды
- Scikit-learn
Импортировать зависимости
# Data manipulation import pandas as pd import numpy as np # Machine Learning Algorithms from sklearn.linear_model import LinearRegression from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.svm import SVR from sklearn.ensemble import GradientBoostingRegressor # Model Selection and Evaluation from sklearn.model_selection import train_test_split # Feature Scaling from sklearn.preprocessing import StandardScaler # Performance from sklearn.metrics import mean_squared_error from sklearn.metrics import mean_absolute_error from sklearn.metrics import r2_score
Предварительная обработка данных
Загрузите набор данных
dataset = pd.read_csv('data.csv')
Сбрасывание нерелевантных колонн Наш набор данных состоит из строк 18207 и 89 столбцов. Не все столбцы понадобятся для наших моделей
to_stay=["ID","Age","Overall","Potential","Value","Wage"] dataset.drop(dataset.columns.difference(to_stay),axis="columns",inplace=True)
Установите столбец ID в качестве индекса набора данных
dataset.set_index("ID",inplace=True)
Наш набор данных в настоящее время в этой форме ID, возраст, в целом, потенциал, стоимость, заработная плата 158023, 31, 94, 94, € 110,5 млн, 565 тыс. Евро 16254, 39, 72, 72, 210 тыс. Евро, 3K €
Преобразовать столбец значения из строки в числовое значение Как можно наблюдать в нашем наборе данных, столбец значения является строкой. Использование подобного значения даст неоптимальный результат для наших регрессионных моделей, поэтому наш следующий шаг – преобразовать его из строки в номер
# Remove the euros sign dataset['Value'] = dataset['Value'].apply(lambda x: x.split('€')[1]) # Convert all value with 'M' to million and those with 'K' to thousand dataset['Value'] = dataset['Value'].apply( lambda x: float(x.split('M')[0])*1000000 if x.split('M').__len__() > 1 else float(x.split('K')[0])*1000 )
Преобразовать столбец заработной платы из строки в числовое значение Так же, как мы преобразовали столбец значения из строки в номер, нам в равной степени необходимо преобразовать столбец заработной платы из строки в номер
dataset['Wage'] = dataset['Wage'].apply(lambda x: x.split('€')[1]) dataset['Wage'] = dataset['Wage'].apply( lambda x: float(x.split('M')[0])*1000000 if x.split('M').__len__() > 1 else float(x.split('K')[0])*1000 )
Разделите набор данных на обучающий набор и набор тестов
X = dataset[['Age', 'Overall', 'Potential', 'Wage']] y = dataset['Value'] 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 = 0)
Создание наших моделей
Множественная линейная регрессия
# Training the Multiple Linear Regression model on the Training set regressor = LinearRegression() regressor.fit(X_train, y_train)
Регрессия дерева решений
# Training the Decision Tree Regression model on the Training set regressor = DecisionTreeRegressor() regressor.fit(X_train, y_train)
Случайная регрессионная модель леса
# Training the Random Forest Regression model on the Training set regressor = RandomForestRegressor(n_estimators = 300) regressor.fit(X_train, y_train)
SVR Model При создании модели SVR мы должны выполнить масштабирование функций на нашем наборе данных, прежде чем построить модель
# Feature Scaling sc_X = StandardScaler() sc_y = StandardScaler() scaled_X_train = sc_X.fit_transform(X_train) scaled_y_train = sc_y.fit_transform(y_train.values.reshape(len(y_train),1)) # Training the SVR model on the Training set regressor = SVR(kernel = 'rbf') regressor.fit(scaled_X_train, scaled_y_train)
Модель регрессии повышения градиента
# Training the Gradient Boosting Regression model on the Training set regressor = GradientBoostingRegressor(n_estimators = 500) regressor.fit(X_train, y_train)
Чтобы предсказать результат тестового набора для моделей без SVR
y_pred = regressor.predict(X_test)
Для модели SVR
y_pred = sc_y.inverse_transform(regressor.predict(sc_X.transform(X_test)))
Вы можете просто оценить производительность различных моделей, запустив код ниже
mse = mean_squared_error(y_test, y_pred) mae = mean_absolute_error(y_test, y_pred) score = r2_score(y_test, y_pred) print('Accuracy:',format(score * 100,'.2f'),'%')
Но лучший способ оценить ваши модели – использовать перекрестную проверку
scores = cross_val_score(estimator = regressor, X = X_train, y = y_train, cv = 10) print("Accuracy: {:.2f} %".format(scores.mean() * 100)) print("Standard Deviation: {:.2f} %".format(scores.std() * 100))
Оценка различных моделей показывает, что модель регрессии повышения градиента имеет лучшую производительность
# New observation age = 20 overall_rating = 70 potential_rating = 80 wage = 50000
Для моделей без SVR
regressor.predict([[age,overall_rating, potential_rating, wage]])
Для модели SVR
sc_y.inverse_transform(regressor.predict(sc_X.transform([[age,overall_rating, potential_rating, wage]])))
В этом руководстве мы смогли построить несколько моделей машинного обучения, чтобы предсказать рыночную стоимость для футболиста.
Счастливого кодирования и наслаждаться машинным обучением
Оригинал: “https://dev.to/jundelikwo/predicting-fifa19-player-market-value-2dc7”