У меня есть набор данных с 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())
1
Kathan Vyas 13 Сен 2018 в 17:45

2 ответа

Лучший ответ

Прежде всего, индексы в 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 ...

4
agruet 13 Сен 2018 в 15:38

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

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
Kathan Vyas 17 Сен 2018 в 18:28