2

对 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)
4

1 回答 1

2

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

您的代码:您的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是 size 的设计矩阵(n_samples, n_features),因此 in 中的每个系数都与 in 中的每个 in 的系数完全model.coef_对应,它们的呈现顺序相同。n_featuresXX

于 2016-09-22T14:03:45.200 回答