对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
中的顺序相同。