【问题标题】:all coefficients turn zero in Logistic regression using scikit learn使用 scikit learn 在 Logistic 回归中所有系数都变为零
【发布时间】:2018-12-26 03:02:06
【问题描述】:

我正在使用 Python 中的 scikit learn 进行逻辑回归。 我有可以通过以下链接下载的数据文件。

link for data

以下是我的机器学习部分代码。

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_auc_score
import pandas as pd
scaler = StandardScaler()

data = pd.read_csv('data.csv')
dataX = data.drop('outcome',axis =1).values.astype(float)
X     = scaler.fit_transform(dataX)
dataY = data[['outcome']]
Y = dataY.values

X_train,X_test,y_train,y_test = train_test_split (X,Y,test_size = 0.25, random_state = 33)
lasso = Lasso(alpha=.3)
lasso.fit(X_train,y_train)
print("MC learning completed")
print(lasso.score(X_train,y_train))
print(lasso.score(X_test,y_test))
print(lasso.coef_)

当我打印系数时,结果全为零。 谁能给我建议?

让我稍微解释一下我的目标。这个问题似乎是一个分类问题,因为我们在 Ytrain 和 Ytest 中只能看到 0 或 1。如果我们举一个简单的例子,0可以认为是错过,1可以认为是得分。我正在尝试做的是计算发生射击时每个事件的概率得分。

提前致谢。

问候,

泽普

【问题讨论】:

  • 嗨库马尔,感谢您的回复。我也附上了数据文件。只需点击链接即可下载。
  • 哦,对不起,我省略了那部分。
  • 没问题。感谢您的帮助。谢谢
  • 我看到使用的是套索模型而不是逻辑回归。 Lasso 用于回归而不是分类。
  • 嗨 Kumar,我正在研究回归而不是分类。使用这些系数,我可以预测结果的概率。谢谢

标签: python scikit-learn logistic-regression


【解决方案1】:

您的Y 变量仅包含0s 和1s。如果您仍想对此数据应用回归,请使用 GridSearch 获取不同的 alpha 参数。

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_auc_score
import pandas as pd
scaler = StandardScaler()

data = pd.read_csv('data.csv')
dataX = data.drop('outcome',axis =1).values.astype(float)
X     = scaler.fit_transform(dataX)
dataY = data[['outcome']]
Y = dataY.values

X_train,X_test,y_train,y_test = train_test_split (X,Y,test_size = 0.25, random_state = 33)
lasso = Lasso(alpha=.0009)
lasso.fit(X_train,y_train)
print("MC learning completed")
print(lasso.score(X_train,y_train))
print(lasso.score(X_test,y_test))
print(lasso.coef_)

结果

MC learning completed
0.37884924358295613
0.3806187071242917
[ 0.00078099  0.13397938 -0.00554932  0.00194722  0.00232949 -0.01100195
 -0.01363906  0.13031317 -0.00146605]

GridSearchCV

from sklearn.model_selection import GridSearchCV
import numpy as np

# Define the grid for the alpha parameter
parameters = {'alpha':[0.01, 0.001, 0.0005]}

# Fit it on X, Y and define the cv parameter for cross-validation
clf = GridSearchCV(lasso, parameters, cv = 3)
clf.fit(X, Y)

# Get the best parameters and model
print(clf.best_estimator_)

注意:要定义特定的参数空间,请使用:parameters = {'alpha': np.arange(0.001,1,0.02)}


编辑 1: 在考虑到您刚刚在问题中添加的最后一段之后,使用以下代码:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_auc_score
import pandas as pd
scaler = StandardScaler()

data = pd.read_csv('data.csv')
dataX = data.drop('outcome',axis =1).values.astype(float)
X     = scaler.fit_transform(dataX)
dataY = data[['outcome']]
Y = dataY.values

X_train,X_test,y_train,y_test = train_test_split (X,Y,test_size = 0.25, random_state = 33)

# Logistic Regression (aka logit, MaxEnt) classifier.
lr = LogisticRegression()
lr.fit(X_train,y_train)

# Predict the probability of the testing samples to belong to 0 or 1 class
predicted_probs = lr.predict_proba(X_test)
print(predicted_probs[0:3])

# The proba of the first testing sample to belong to class 0 is 0.8704 and to class 1 0.1295
[[0.87046267 0.12953733]
 [0.87797594 0.12202406]
 [0.80046704 0.19953296]]

【讨论】:

  • 谢谢@seralouk。
  • 希望这会有所帮助。另请参阅我回答末尾的最后一条评论。干杯
  • 谢谢@seralouk。我如何检查拟合的准确性。我是机器学习新手。
  • 你到底想计算什么?准确性通常是指分类评估,但在这里你有一个回归问题。也许是 MSE 或 MAE ?让我知道,我可以帮你解决所有这些问题
  • 我使用 lasso 来预测结果的概率。所以我将使用所有系数来计算该概率。谢谢
【解决方案2】:

我只是在 Lasso 中更改 alpha: my result

【讨论】:

  • 谢谢@chuzz。如何检查模型的准确性?
【解决方案3】:

Y 中的数据看起来像类。它们不是 0 就是 1。所以你应该使用分类算法,然后使用 coeff 来获得概率。

大多数 scikit 分类器都有一个predict_proba(),您可以使用它直接获取概率。

如果需要绝对使用回归模型,那么您可以尝试使用普通最小二乘法的LinearRegression,或自动调整 alpha 以适应需要的LassoCV

【讨论】:

    猜你喜欢
    • 2020-09-12
    • 2017-08-30
    • 2018-04-09
    • 2015-10-12
    • 2017-06-21
    • 2016-09-18
    • 2013-09-30
    • 2019-05-14
    相关资源
    最近更新 更多