Python逻辑回归-局部设计矩阵和分类数据



对python和机器学习很陌生。

我正在尝试建立一个逻辑回归模型。我曾在R中获得lambda,并使用交叉验证来找到最佳模型,现在将其移动到python中。

这里我创建了一个设计矩阵,并使其稀疏。然后进行逻辑回归。它似乎起作用了。

我的问题是,既然我已经声明了我的术语item_number是一个类别,我如何知道哪个已成为哑变量?我怎么知道每个类别的名字对应哪个系数呢?

from patsy import dmatrices
from sklearn.linear_model import LogisticRegression
from sklearn import preprocessing

def train_model (data, frm, Rlambda):
    y, X = dmatrices(frm , data, return_type="matrix")
    y = np.ravel(y)
    scaler = sklearn.preprocessing.MaxAbsScaler(copy=False)
    X_trans = scaler.fit_transform(X)
    model = LogisticRegression(penalty ='l2', C=1/Rlambda)
    model = model.fit(X_trans, y)
frm = 'purchase ~ price + C(item_number)'
Rlambda = 0.01
model, train_score = train_model(data1,frm,Rlambda)

首先我会修复你代码中的错误,然后我会回答你的问题。

代码:你的train_model函数不会返回你认为的结果。目前,它不返回任何东西,您希望它同时返回您的模型和训练分数。当你拟合一个模型时,你需要定义训练分数的含义——默认情况下,模型不会返回任何东西给你。现在让我们只返回你训练的模型。

所以你应该更新你的train_model函数如下:

def train_model (data, frm, Rlambda):
    y, X = dmatrices(frm , data, return_type="matrix")
    y = np.ravel(y)
    scaler = sklearn.preprocessing.MaxAbsScaler(copy=False)
    X_trans = scaler.fit_transform(X)
    model = LogisticRegression(penalty ='l2', C=1/Rlambda)
    # model.fit() operates in-place
    model.fit(X_trans, y)
    return model

现在,当您想确定哪些变量对应时,model.coef_返回大小为(n_classes, n_features)的决策函数中的所有系数。系数的顺序与您的特征传递到.fit()方法的顺序相对应。因此,在您的案例中,X_trans是大小为(n_samples, n_features)的设计矩阵,因此model.coef_中的每个系数都与X中的每个n_features的系数完全对应,其顺序与X中的顺序相同。

相关内容

  • 没有找到相关文章

最新更新