使用python

时间:2018-04-28 11:32:44

标签: python machine-learning logistic-regression

我正在尝试使用python 构建一个多类逻辑回归分类器,而不使用SKlearn库

我的目标是编写一个分类器,用测试数据中的tf-idf值对应用程序的类别(例如,健康,社交等)进行分类。

我现在得到的是一个数据框,其中数据和标签由appname匹配,如图所示。

enter image description here

在图像中,第一个数组'data'是来自训练数据的tf-idf值,第二个数组'labels'对应于app的标签。

我现在所知道的是,我可以使用逻辑回归来学习每个标签的权重和偏差,然后使用这些值来预测应用程序在测试数据中的标签。我现在能做的是使用sigmoid函数p = 1.0 /(1.0 + np.exp(-z))其中z是b + w1x1 + w2x2 + ... + wnxn(b是偏差,w是权重,x是这种情况下的tf-idf值)。我只是试图从第一项获得权重和偏见。代码如下:

    # the first training item 
    X = train_data[0, 0:13625]#13625 features
    z = 0.0
    for j in range(len(X)):
        z += W[j] * X[j]
    z += b

    p = 1.0 / (1.0 + np.exp(-z))  # sigmoid function
    y = train_data[1, i]  # I don't know if it is right to use the second item's feature as a target. 

    # update all weights after each train item
    for j in range(0, 13625):  # gradient ascent log likelihood
        W[j] += lr * X[j] * (y - p)  # t - o gives an "add"
    b += lr * (y - p)  # update bias

我不知道以这种方式训练体重和偏见是否正确,任何人都知道如何为每个标签获得权重和偏见以便对应用进行分类?

1 个答案:

答案 0 :(得分:0)

对于具有多个类的逻辑回归,您基本上解决了这个等式 Y = WX + B并且您希望为每个prob(Y=l | x=x)

增加label=l

所以在你得到y向量的输出层你需要对其概率化函数进行归一化,常用的是softmax

训练您使用渐变体面的模型,它基本上根据实际标签计算模型预测的误差,并使用此值来调整WB 你需要使用模型函数的导数来使用softmax或sigmoid导数

您可以找到更多信息here

完整的代码,我可能会提供更多的帮助