Алгоритм случайного леса для классификации и регрессии с повторной стратификацией - PullRequest
0 голосов
/ 15 апреля 2020

Я делаю прогнозную модель личного (и большого) набора данных. У меня есть десятки столбцов (некоторые непрерывные и другие фиктивные (0/1) переменные), и я хочу использовать алгоритм случайного леса для классификации и регрессии. И для того, и для другого я хочу использовать повторный стратифицированный склад (10 раз и 10 повторений), а для классификации - оценку путаницы и AU C, а для регрессии - RMSE.

. Для классификации я сделал это В соответствии с некоторыми вещами, которые я читал, муравей смотрел в inte rnet, но я не уверен, что это лучший способ. Теперь я не знаю точно, как сделать матрицу путаницы и AU C. Кто-нибудь может мне помочь?

df_C = df
df_C.loc[(df_C['target'] >= 0.0) & (df_C['target'] <= 4.0), 'target'] = 1    
df_C.loc[(df_C['target'] > 4.0) & (df_C['target'] <= 7), 'target'] = 2  
df_C.loc[(df_C['target'] > 7) & (df_C['target'] <= 9), 'target'] = 3 
df_C.loc[(df_C['target'] > 9), 'target'] = 3

from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, accuracy_score

# Split dataset in features and target variable
X = df_C.loc[:, df_C.columns != 'target'] 
y = df_C['target'] # Target variable

classifier= RandomForestClassifier()

accuracy_C = []
rskf = RepeatedStratifiedKFold(n_splits=10, n_repeats=10)
rskf.get_n_splits(X, y)
for train_index, test_index in rskf.split(X,y):
    print("Train:", train_index, "Validation:", test_index)
    X1_train, X1_test = X.iloc[train_index], X.iloc[test_index]
    y1_train, y1_test = y.iloc[train_index], y.iloc[test_index]

classifier.fit(X1_train,y1_train)
prediction = classifier.predict(X1_test)
score = accuracy_score(prediction, y1_test)
accuracy_C.append(score)

np.array(accuracy).mean()

Кроме того, для регрессии мне нужно использовать RandomForestRegressor () вместо RandomForestClassifier () и не разбивать на категории целевую переменную?

...