【问题标题】:Finding Logistic Regression weights from K-Fold CV从 K-Fold CV 中找到 Logistic 回归权重
【发布时间】:2019-02-18 08:06:57
【问题描述】:

我有一个包含 36 个特征的数据集,我将所有这些特征用于折叠交叉验证中的逻辑回归算法。我的 K 值为 10。有什么方法可以在 CV 的第 10 倍末尾找到专用于我的所有 36 个特征的权重?这是我的代码:

    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())

【问题讨论】:

    标签: python dataframe scikit-learn logistic-regression cross-validation


    【解决方案1】:

    首先,python中的索引从0开始,所以写labels = df.columns[2:36]假设你的目标列有索引1,这意味着在人类语言中,它是从左边开始的第二个(循环值,第36列将作为第 0 列返回)。如果您的目标列是从数据框左侧开始的第一列,您应该写labels = df.columns[1:35]

    一些函数,包括逻辑回归,已经在 sklearn.linear_model 中实现了 CV 模式。我建议你看看here,在那里你可以了解如何调整和使用它。

    你可以试试这样的:

    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_trainy_train 拟合您的算法并在X_testy_test 上对其进行评估,而不是复制我编写的一小段代码,其中拟合部分在Xy,如果在 Xy 上评估您的模型,这将导致您对准确度的衡量过于乐观...

    【讨论】:

      【解决方案2】:

      我明白了。我们可以这样实现:

      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
      

      这将为在 KFOLD 和 LR 中 CV=10 的给定模型提供系数和截距。

      【讨论】:

      • 这可以用任意数量的折叠来实现,我们只需要改变 k 折叠中 n_splits 的值。
      猜你喜欢
      • 2019-03-02
      • 2019-11-09
      • 2019-01-23
      • 2018-03-23
      • 2014-05-19
      • 2021-04-26
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      相关资源
      最近更新 更多