Случайный лесной классификатор

Я пытаюсь создать классификатор случайного леса для биномиальной классификации. Может ли кто-нибудь объяснить, почему мои оценки точности меняются каждый раз, когда я запускаю эту программу? Результаты варьируются от 68% до 74%. Кроме того, я попытался настроить параметры, но не могу добиться точности выше 74. Любые предложения по этому поводу также будут оценены. Я пытался использовать GridSearchCV, но мне удалось приличное увеличение только на 3 балла.

#import libraries
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn import preprocessing

#read data into pandas dataframe
df = pd.read_csv("data.csv")

#handle missing values
df = df.dropna(axis = 0, how = 'any')

#handle string-type data
le = preprocessing.LabelEncoder()
le.fit(['Male','Female'])
df.loc[:,'Sex'] = le.transform(df['Sex'])

#split into train and test data
df['is_train'] = np.random.uniform(0, 1, len(df)) <= 0.8
train, test = df[df['is_train'] == True], df[df['is_train'] == False]

#make an array of columns
features = df.columns[:10]

#build the classifier
clf = RandomForestClassifier()

#train the classifier
y = train['Selector']
clf.fit(train[features], train['Selector'])

#test the classifier
clf.predict(test[features])

#calculate accuracy
accuracy_score(test['Selector'], clf.predict(test[features]))
accuracy_score(train['Selector'], clf.predict(train[features]))

person TheBeginner    schedule 10.09.2017    source источник
comment
ссылка на набор данных: archive.ics.uci.edu /мл/наборы данных/   -  person TheBeginner    schedule 10.09.2017
comment
Чтобы улучшить вашу модель, я бы посоветовал вам использовать ансамбли, а также попробовать XGBoost.   -  person Tushar Gupta    schedule 10.09.2017


Ответы (1)


Ваша точность меняется каждый раз, когда вы запускаете программу, потому что созданная модель отличается. И модель отличается, потому что вы не исправляете случайное состояние при его создании. Взгляните на параметр random_state из документации scikit-learn< /а>.

Что касается вашего второго вопроса, есть много вещей, которые вы можете попробовать, чтобы повысить точность модели. В порядке важности:

  • Получите больше данных о тренировках
  • Улучшите свои обучающие данные (т. е. избавьтесь от признаков или образцов низкого качества, создайте новые признаки...)
  • Настройте параметры вашего алгоритма обучения (у RandomForest есть несколько вариантов для экспериментов)
  • Попробуйте другую модель обучения.
  • Попробуйте комбинировать разные модели
person carrdelling    schedule 10.09.2017
comment
Я пытался настроить параметры и в итоге получил: n_jobs = -1, n_estimators = 75, min_samples_leaf = 25, random_state = 42, oob_score = True. Но все же я получаю разные значения точности: Out[472]: 0,75221238938053092, Out[474]: 0,68965517241379315 - person TheBeginner; 10.09.2017
comment
ваш разделитель поезда/теста также является случайным, если я правильно прочитал ваш код (вы можете использовать from sklearn.model_selection import train_test_split, который принимает аргумент random_state) - person unhammer; 15.03.2018