gpt4 book ai didi

python 逻辑回归 - patsy 设计矩阵和分类数据

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:10 27 4
gpt4 key购买 nike

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

关于python 逻辑回归 - patsy 设计矩阵和分类数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39640672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com