Могу ли я запустить модель ML в sklearn, если мои переменные содержатся в массивах - PullRequest
0 голосов
/ 30 октября 2019

В настоящее время у меня есть следующий набор данных:


Injury_Type  Organ      PositionGroup    Age          speed
[injured]      [back]         LW           30.929500      5.239167 
[torn]     [biceps]       CB           26.26          4.53
[torn]     [ACL]          LB           26.15          4.44

Еще с несколькими строками, связанными с игроком, с типом травмы, которую он получил, органом, который получил травму, положением, в котором они играют, и их возрастом. и скорость. Моя цель - количество игр, которые игрок пропустит. Я пытаюсь обучить модель прогнозировать количество игр, которые пропустит игрок.

Некоторые столбцы хранятся в массивах, и это вызывает у меня некоторые проблемы с запуском моей модели в sklearn. Как я могу обойти это? Я новичок в sklearn, и если бы вы, ребята, тоже имели какие-то отзывы о процессе, я мог бы предсказать количество пропущенных игр, что было бы здорово. Я пытаюсь построить случайный лесной классификатор, чтобы сначала увидеть важность функций, после чего я буду запускать K-кратную проверку, масштабировать функции, а затем обучать модель на нескольких алгоритмах ML.

Как вы думаете, это хороший способ идти о вещах? Ребята, вы предлагаете какие-нибудь изменения?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вы должны использовать CountVectorizer. Здесь вы можете поместить несколько элементов в массив.

для Injury_Type, может быть ['back','leg'] для Органа, он также может принимать несколько входов.

Счетчик векторов преобразует каждый уникальный элемент в фиктивную переменную. С этого момента вы можете использовать эти столбцы для обучения новой модели.

import pandas as pd
import ast
data = pd.read_csv('injury.txt',sep=';',converters={'Injury_Type': ast.literal_eval, 'Organ': ast.literal_eval})

data
Injury_Type Organ   PositionGroup   Age speed   daysmissing
0   [back]  [back]  LW  30.9295 5.239167    20
1   [torn]  [biceps]    CB  26.2600 4.530000    10
2   [torn]  [ACL]   LB  26.1500 4.440000    5


data['Injury_Type']
data['Injury_Type_String'] = [' '.join(l) for l in data['Injury_Type']]

data['Organ']
data['Organ_String'] = [' '.join(l) for l in data['Organ']]


from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()

X = vectorizer.fit_transform(list(data['Organ_String']))
Organ_df = pd.DataFrame(X.toarray(),columns=vectorizer.get_feature_names())
Organ_df
acl back    biceps
0   0   1   0
1   0   0   1
2   1   0   0

Y = vectorizer.fit_transform(list(data['Injury_Type_String']))
Injury_Type_df = pd.DataFrame(Y.toarray(),columns=vectorizer.get_feature_names())
Injury_Type_df
back    torn
0   1   0
1   0   1
2   0   1


data = pd.concat([data,Organ_df],axis=1)
data = pd.concat([data,Injury_Type_df],axis=1)

del data['Injury_Type']
del data['Injury_Type_String']
del data['Organ']
del data['Organ_String']

print(data)
  PositionGroup      Age     speed  daysmissing  acl  back  biceps  back  torn
0            LW  30.9295  5.239167           20    0     1       0     1     0
1            CB  26.2600  4.530000           10    0     0       1     0     1
2            LB  26.1500  4.440000            5    1     0       0     0     1
PositionGroup_df = pd.get_dummies(data['PositionGroup'])
data = pd.concat([data,PositionGroup_df],axis=1)

del data['PositionGroup']


print(data)
       Age     speed  daysmissing  acl  back  biceps  back  torn  CB  LB  LW
0  30.9295  5.239167           20    0     1       0     1     0   0   0   1
1  26.2600  4.530000           10    0     0       1     0     1   1   0   0
2  26.1500  4.440000            5    1     0       0     0     1   0   1   0

y = data.pop('daysmissing')
X = data

from sklearn.ensemble import RandomForestRegressor
regr = RandomForestRegressor()
regr.fit(X,y)
0 голосов
/ 30 октября 2019

Хотя это не так много, если не смотреть на данные точно, но я полагаю, у вас есть несколько незаметных переменных, которые могут принимать только конечный набор значений, например PositionGroup. Обучение любой модели потребует от вас, чтобы ваши переменные были числами непрерывных переменных, поэтому вам нужно было бы представить эти переменные в некоторой форме чисел для обучения вашей модели.

Я предлагаю вам сначала просмотреть статью https://www.analyticsvidhya.com/blog/2015/11/easy-methods-deal-categorical-variables-predictive-modeling/, чтобы вы могли лучше понять проблему.

Позже вы можете рассмотреть возможность использования Scikit's preprocessing.OneHotEncoder() или preprocessing.LabelEncoder(). Проверьте https://scikit -learn.org / stable / modules / generate / sklearn.preprocessing.OneHotEncoder.html и просмотрите приведенные примеры. Я надеюсь, что это, по крайней мере, даст вам возможность начать. :)

...