2016-07-27 3 views
1

Я пытаюсь реализовать логистическую регрессию для проблемы классификации, но это дает мне действительно причудливые результаты. Я получил достойные результаты с ускорителями градиента и случайными лесами, поэтому я подумал о том, чтобы добраться до базового уровня и посмотреть, чего лучше всего достичь. Можете ли вы помочь мне указать, что я делаю неправильно, что вызывает эту переоснащение? Вы можете получить данные из https://www.kaggle.com/c/santander-customer-satisfaction/dataЛогистическая регрессия Python

Вот мой код:

import pandas as pd 
import numpy as np 
train = pd.read_csv("path") 
test = pd.read_csv("path") 
test["TARGET"] = 0 
fullData = pd.concat([train,test], ignore_index = True) 

remove1 = [] 
for col in fullData.columns: 
if fullData[col].std() == 0: 
    remove1.append(col) 

fullData.drop(remove1, axis=1, inplace=True) 
import numpy as np 
remove = [] 
cols = fullData.columns 
for i in range(len(cols)-1): 
v = fullData[cols[i]].values 
    for j in range(i+1,len(cols)): 
    if np.array_equal(v,fullData[cols[j]].values): 
     remove.append(cols[j]) 

fullData.drop(remove, axis=1, inplace=True) 

from sklearn.cross_validation import train_test_split 
X_train, X_test = train_test_split(fullData, test_size=0.20, random_state=1729) 
print(X_train.shape, X_test.shape) 

y_train = X_train["TARGET"].values 
X = X_train.drop(["TARGET","ID"],axis=1,inplace = False) 

from sklearn.ensemble import ExtraTreesClassifier 
clf = ExtraTreesClassifier(random_state=1729) 
selector = clf.fit(X, y_train) 

from sklearn.feature_selection import SelectFromModel 
fs = SelectFromModel(selector, prefit=True) 
X_t = X_test.drop(["TARGET","ID"],axis=1,inplace = False) 
X_t = fs.transform(X_t) 
X_tr = X_train.drop(["TARGET","ID"],axis=1,inplace = False) 
X_tr = fs.transform(X_tr) 


from sklearn.linear_model import LogisticRegression 
log = LogisticRegression(penalty ='l2', C = 1, random_state = 1, 
        ) 
from sklearn import cross_validation 
scores = cross_validation.cross_val_score(log,X_tr,y_train,cv = 10) 

print(scores.mean()) 
log.fit(X_tr,y_train) 
predictions = log.predict(X_t) 
predictions = predictions.astype(int) 
print(predictions.mean()) 

ответ

0

Вы не настройки параметров C - ну, технически вы, но только значение по умолчанию - что один из обычных подозреваемых в переустройстве. Вы можете посмотреть на GridSearchCV и немного поиграть с несколькими значениями для параметра C (например, от 10^-5 до 10^5), чтобы убедиться, что это облегчает вашу проблему. Изменение правила штрафа на «l1» также может помочь.

Кроме того, с этим соревнованием было несколько проблем: это несбалансированный набор данных, а распределения между учебным комплектом и частным LB были немного разными. Все это, если вы собираетесь играть против вас, особенно при использовании простых алгоритмов, таких как LR.

+0

Спасибо за ответ. Да, здесь сложно использовать LR, показатель переобучения колеблется около 0.98 независимо от того, какое значение я выбираю для C или штрафа. Я использую logisticRegressionCV и использовал список Cs вместо одного значения, но без эффекта. Я должен был взять другой набор данных, чтобы показать силу логистической регрессии. –

Смежные вопросы