Нахождение весов логистической регрессии из K-Fold CV - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть набор данных с 36 объектами, и я использую все эти функции в алгоритме логистической регрессии в рамках перекрестной проверки Fold. У меня значение K равно 10. Можно ли как-нибудь найти веса, посвященные всем моим 36 функциям, в конце 10-го раза в CV? вот мой код:

    labels = df.columns[2:36]

    X = df[labels]
    y = df['target']

    # use train/test split with different random_state values
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4)

    logreg = LogisticRegression()
    classifier_pre = cross_val_score(logreg, X, y, cv=20, scoring='precision')
    print("Precision:" ,classifier_pre.mean())

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Я понял. Мы могли бы реализовать это так:

labels = df.columns[2:35]

X = df[labels]
y = df['target']

kf = KFold(n_splits=10, shuffle=True, random_state=42)
logistic = LogisticRegressionCV(Cs=2, fit_intercept=True, cv=kf, verbose =1, random_state=42)
logistic.fit(X_train, y_train)
print("Train Coefficient:" , logistic.coef_) #weights of each feature
print("Train Intercept:" , logistic.intercept_) #value of intercept

Это даст коэффициенты и перехваты для данной модели с CV = 10 в KFOLD и LR.

0 голосов
/ 13 сентября 2018

Прежде всего, индексы в python начинаются с 0, поэтому при написании labels = df.columns[2:36] предполагается, что у вашего целевого столбца есть индекс 1, то есть в человеческом языке это второй, начиная слева (цикл по значениям, столбец 36будет возвращен как столбец 0).Если целевой столбец является первым столбцом, начинающимся слева от вашего кадра данных, вам лучше написать labels = df.columns[1:35]

Некоторые функции, включая логистическую регрессию, уже имеют схему CV, реализованную в sklearn.linear_model.Я советую вам посмотреть здесь , где вы можете увидеть, как его настроить и использовать.

Вы можете попробовать что-то вроде:

from sklearn.linear_model import LogisticRegressionCV

labels = df.columns[1:35] #if indeed your very first column is your target !!

logistic = LogisticRegressionCV(Cs=4, fit_intercept=True, cv=10, verbose =1, random_state=42)
logistic.fit(X, y)
print(logistic.coef_) #weights of each feature
print(logistic.intercept_) #value of intercept

Последний совет:Рекомендуется использовать набор тестов, сгенерированный train_test_split, но не обучайте его модели.Используйте его только для оценки в самом конце.Это означает, что здесь вы должны согласовать свой алгоритм с X_train и y_train и оценить его на X_test и y_test, вместо того, чтобы копировать небольшой фрагмент кода, который я написал, где подгонка выполняется на X иy, что приведет к чрезмерной оптимистической оценке вашей точности, если оценить вашу модель на X и y ...

...