【问题标题】:python logistic regression - patsy design matrix and categorical datapython逻辑回归 - patsy设计矩阵和分类数据
【发布时间】:2016-09-22 22:03:45
【问题描述】:

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

【问题讨论】:

    标签: python scikit-learn patsy


    【解决方案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_ 中的每个系数与X 中每个n_features 的系数完全相同,它们的呈现顺序相同在X

    【讨论】:

    • 感谢调试。好的,所以它们的输出与输入时相同。但是由于我传递的是分类数据,因此其中一个类别不应该成为虚拟变量然后消失吗?
    • 假设 item_number 取值从 1 到 5,然后在 C(item_number) 之后,你得到 4 个假人(取 0、1)。如果您真的关心系数和虚拟名称之间的匹配,您确实需要首先标记您的数据集,您可能会返回数据框而不是矩阵,而是设置return_type='dataframe'。并使用x.head()、x.columns等查找变量名。
    猜你喜欢
    • 2023-04-05
    • 2021-11-30
    • 2021-01-13
    • 2015-01-30
    • 2018-01-26
    • 2019-05-26
    • 1970-01-01
    • 2016-02-01
    • 2020-07-08
    相关资源
    最近更新 更多