簡體   English   中英

python,測試集和訓練集中的邏輯回歸

[英]logistic regression in python, Test set and Train set

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". 

我還將數據拆分為訓練集和測試集,該怎么辦? 在此之后,我必須使用預測命令。

R中的“ glm”命令看起來比Python容易得多。

在處理某些數據時,我也遇到了類似的錯誤。 這是由於數據的屬性。 由於兩組(分數= 0和分數= 1)在數據中完全分開,因此決策邊界可以在任何地方(無限解)。 因此,該庫無法返回單個解決方案。 顯示您的數據。 解決方案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/generation/sklearn.cross_validation.train_test_split.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM