【问题标题】:logistic regression in python, Test set and Train setpython,测试集和训练集中的逻辑回归
【发布时间】:2015-04-10 03:00:10
【问题描述】:
file = pd.DataFrame({'name':['s', 'k', 'lo', 'ki'] , 'age':[12, 23, 32, 22], 'marks':[34, 34, 43, 22], 'score':[1, 1, 0, 1]})

我想使用以下命令运行逻辑回归:

import statsmodels.formula.api as smf 
logit = smf.logit( 'score ~ age + marks', file)
results = logit.fit() 

但我得到一个错误:

"statsmodels.tools.sm_exceptions.PerfectSeparationError:
Perfect separation detected, results not available". 

我还将数据拆分为训练集和测试集,我该怎么做?之后我必须使用 predict 命令。

R 中的“glm”命令看起来比 Python 简单得多。

【问题讨论】:

    标签: python logistic-regression


    【解决方案1】:

    我在处理一些数据时也遇到了类似的错误。这是由于数据的属性。 由于这两组(score=0 和 score=1)在您的数据中完全分开,因此决策边界可以在任何地方(无限解)。所以图书馆不能返回一个单一的解决方案。 这个FIGURE 显示您的数据。解 1,2,3 都有效。

    我在 Matlab 中使用 glmnet 运行了这个。来自 Matlab 的错误为:

    警告:估计的系数将故障与 成功。这意味着理论上的最佳估计不是有限的。

    使用更多数据点会有所帮助。

    有趣的是,来自 scikit-learn 的 LogisticRegression 似乎可以毫无怨言地工作。

    使用 scikit-learn 解决您的问题的示例代码是:

    import pandas as pd
    import numpy as np
    from patsy import dmatrices
    from sklearn.linear_model import LogisticRegression
    
    file = pd.DataFrame({'name':['s', 'k', 'lo', 'ki'] , 'age':[12, 23, 32, 22], 'marks':[34, 34, 43, 22], 'score':[1, 1, 0, 1]})
    # Prepare the data
    y,X = dmatrices('score ~ age + marks',file)
    y = np.ravel(y)
    # Fit the data to Logistic Regression model
    model = LogisticRegression()
    model = model.fit(X,y)
    

    要将数据拆分为训练和测试,您可能需要参考以下内容: http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_test_split.html

    【讨论】:

      猜你喜欢
      • 2015-01-07
      • 2020-02-25
      • 2016-01-31
      • 1970-01-01
      • 2019-04-08
      • 2019-03-02
      • 2018-12-29
      • 1970-01-01
      • 2017-11-01
      相关资源
      最近更新 更多