Как обучить алгоритм классификации с нормализованным набором данных, используя scikit-learn python - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть набор данных в формате CSV, 6 столбцов и 1877 строк. Полный набор данных можно просмотреть ShareCSV .

Первые пять столбцов являются характеристиками, а последний столбец - двоичным результатом. Я хочу создать классификационную сеть для прогнозирования результата, используя пять входных данных как в CSV выше.

Я использую следующий код для нормализации данных с помощью pandas.

from sklearn import preprocessing
import pandas as pd

df = pd.read_csv(r"D:\path\data.csv", sep=",")

df=(df-df.min())/(df.max()-df.min())

Теперь мне нужно передать эти данные в scikit-learn и выбрать классификацию алгоритм, однако я не уверен, что было бы оптимальным, если бы кто-нибудь мог порекомендовать лучший алгоритм для моих данных и приблизительную реализацию, которая была бы великолепна.

1 Ответ

0 голосов
/ 05 февраля 2020

Ι скажет, что вы можете разделить значения с помощью train_test_split, а затем обучить их в алгоритме классификации с помощью соответствующего показателя c.

Ниже приведено кое-что, что я использовал (хотя для задачи регрессии), что вы можете изменить в соответствии со своими потребностями:

X = TRAIN_DS[["season", "holiday", "workingday", "weather", "weekday",
              "month", "year", "hour", 'humidity', 'temperature']]

Y = TRAIN_DS['count']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

estimators = [('randf', RandomForestRegressor(max_depth= 50, n_estimators= 1500)), ('gradb', GradientBoostingRegressor(max_depth= 5, n_estimators= 400)), ('gradb2',GradientBoostingRegressor(n_estimators= 4000)), ('svr', SVR('rbf',gamma='auto')), ('ext', ExtraTreesRegressor(n_estimators=4000))] 

voting = StackingRegressor(estimators) 
voting.fit(X = X_train, y = np.log1p(y_train))

Для лучшей модели я бы предложил вам использовать соответствующий показатель c. Вот функция RMSLE и R2, которая может оказаться полезной:

'''Calculating RMSLE score, r2 score as well as plotting''' 
def calc_plot(y_test, y_pred, name): 
    # Removing negative values for i, y in enumerate
    (y_pred): if y_pred[i] < 0: y_pred[i] = 0 
    # Printing scoring 
    print('RMSLE for ' + name + ':', np.sqrt(mean_squared_log_error(y_test, y_pred))) 

    print('R2 for ' + name + ':', r2_score(y_test, y_pred)) 

Также вы можете использовать Классификатор голосования или Классификатор стека , чтобы использовать несколько моделей для своих прогнозов. , Наконец, вы можете использовать GridSearchCV , чтобы проверить различные значения параметров алгоритма классификации, который вы используете. Примером проблемы регрессии может быть следующий:

gr = SGDRegressor()

parameters = {'loss':['squared_loss','huber','epsilon_insensitive','squared_epsilon_insensitive'], 'penalty':['l2','l1','elasticnet'],
              'fit_intercept':[True,False], 'learning_rate':['constant','optimal','invscaling','adaptive'], 'alpha':[0.0001,0.005,0.001],
              'l1_ratio':[0.15,0.5,0.25], 'max_iter':[500,1000,2000], 'epsilon':[0.1,0.4], 'eta0':[0.01,0.05,0.1], 'power_t':[0.25,0.1,0.5],
              'early_stopping':[True,False], 'warm_start':[True,False],'average':[True,False], 'n_iter_no_change':[3,5,10,15]}
lModel = GridSearchCV(gr,parameters, cv=LeaveOneOut(), scoring = 'neg_mean_absolute_error')

Надеюсь, это поможет!

...