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)
答案 0 :(得分:1)
首先,我将修复您的代码错误,然后我将回答您的问题。
您的代码:
您的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_
中的每个系数都与n_features
中每个X
的系数完全对应。 1}}按照X
中的相同顺序显示。