Как добавить коэффициенты регрессии из нескольких моделей? - PullRequest
0 голосов
/ 26 января 2019

У меня есть несколько переменных Y, и я запускаю цикл для создания нескольких моделей.Я должен создать двумерный массив со всеми коэффициентами.Столкновение с ошибкой в ​​том же.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)    
accuracy_logistic = np.ones(100,dtype = float)
model_log = []
y_pred_output = np.array([])
    pred_coef = pd.DataFrame()
    for i in range(0,100):  

        model_log = LogisticRegression(class_weight='balanced')
        model_log.fit(X_train,y_train[:,i])
        log_prediction = model_log.predict(X_test)
        accuracy_logistic[i] = accuracy_score(y_test[:,i],log_prediction)

       ##Error inline below##

        pred_coef = np.append(pred_coef, np.transpose(np.array(model_log.coef_)), axis= 0)

Сообщение об ошибке


ValueError                                Traceback (most recent call 
---> 12     pred_coef = np.append(pred_coef, np.transpose(np.array(model_log.coef_)), axis= 0)

~/anaconda3/lib/python3.7/site-packages/numpy/lib/function_base.py in append(arr, values, axis)
   4526         values = ravel(values)
   4527         axis = arr.ndim-1
-> 4528     return concatenate((arr, values), axis=axis)

ValueError: all the input arrays must have same number of dimensions

1 Ответ

0 голосов
/ 26 января 2019

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

pred_coef = np.append(pred_coef, np.transpose(np.array(model_log.coef_)), axis= 0)

Вы создали DataFrame pred_coef, поэтому, похоже, вам следует использовать функциональность df.append..

pred_coef = pred_coef.append(pd.Series(model_log.coef_[0]), ignore_index=True)

Это должно предоставить вам DataFrame с каждой строкой, являющейся коэффициентами для данного y.

EDIT: @Alollz подчеркивает, что итеративное добавление к DataFrame неэффективно,Это можно сделать, просто создав список перед циклом, а не создавая DataFrame pred_coef и добавляя к нему коэффициенты.Затем вы можете создать свой Dataframe из списка.Например,

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)    
accuracy_logistic = np.ones(y.shape[1],dtype = float)
model_log = []
y_pred_output = np.array([])
coef_list = []

for i in range(0,y.shape[1]):  
    model_log = LogisticRegression(class_weight='balanced')
    model_log.fit(X_train,y_train[:,i])
    log_prediction = model_log.predict(X_test)
    accuracy_logistic[i] = accuracy_score(y_test[:,i],log_prediction)
    coef_list.append(model_log.coef_[0])

pred_coef = pd.DataFrame(coef_list)
...