我在向sklearn.linear_model.LogisticRegression添加自己的功能时遇到了一些问题。但无论如何,让我们看看一些示例代码:
from sklearn.linear_model import LogisticRegression, LinearRegression
import numpy as np
#Numbers are class of tag
resultsNER = np.array([1,2,3,4,5])
#Acording to resultNER every row is another class so is another features
#but in this way every row have the same features
xNER = np.array([[1.,0.,0.,0.,-1.,1.],
[1.,0.,1.,0.,0.,1.],
[1.,1.,1.,1.,1.,1.],
[0.,0.,0.,0.,0.,0.],
[1.,1.,1.,0.,0.,0.]])
#Assing resultsNER to y
y = resultsNER
#Create LogReg
logit = LogisticRegression(C=1.0)
#Learn LogReg
logit.fit(xNER,y)
#Some test vector to check wich class will be predict
xPP = np.array([1.,1.,1.,0.,0.,1.])
#linear = LinearRegression()
#linear.fit(x, y)
print "expected: ", y
print "predicted:", logit.predict(xPP)
print "decision: ",logit.decision_function(xNER)
print logit.coef_
#print linear.predict(x)
print "params: ",logit.get_params(deep=True)
上面的代码简单明了。因此,我有一些类,我称之为1,2,3,4,5(resultsNER),它们与一些类相关,如"数据"、"个人"、"组织"等。因此,对于每个类,我都会自定义返回true或false的特征,在这种情况下是1和0。示例:如果token等于"(S|S)unday",则它是数据类。从数学上讲,这是清楚的。我测试了每个类的特征。然后我查看哪个类的特征之和的最大值(这就是为什么返回数不是布尔值),并选择它。换句话说,我使用argmax函数。当然,在总结中,每个特征都有阿尔法系数。在这种情况下,它是多类分类,所以我需要知道如何将多类特征添加到sklearn中。后勤回归。
我需要两件事,阿尔法系数和添加我自己的特征到逻辑回归。对我来说,最重要的是如何为每个类向sklearn.LogisticRegression
添加我自己的特性函数。
我知道我可以通过梯度下降来计算系数。但我认为当我使用fit(x,y)时,LogisticRegression使用一些算法来计算系数,我可以通过属性来获得这些系数CCD_ 2。
最后,我的主要问题是如何在我的示例类1,2,3,4,5(resultNER)中为不同的类添加自定义特性。
对您的问题不太确定,但有几件事可能会对您有所帮助:
-
您可以使用
predict_proba
函数来估计每个类别的概率:>>> logit.predict_proba(xPP) array([[ 0.1756304 , 0.22633999, 0.25149571, 0.10134168, 0.24519222]])
-
如果你想让特征有一些权重(这就是你所说的阿尔法吗?),你不是在学习算法中,而是在预处理阶段。在你的情况下,你可以使用系数数组:
>>> logit = LogisticRegression(C=1.0).fit(xNER,y) >>> logit.predict(xPP) array([3]) >>> alpha = np.array([[0.2, 0.2, 1, 1, 0.3, 1]]) >>> logit = LogisticRegression(C=1.0).fit(alpha*xNER,y) >>> logit.predict(alpha*xPP) array([2])