有没有办法实现样本权重?
我在用Python的statsmodels库做逻辑回归分析。比如说:
import statsmodels.api as sm
import numpy as np
x = arange(0,1,0.01)
y = np.random.rand(100)
y[y<=x] = 1
y[y!=1] = 0
x = sm.add_constant(x)
lr = sm.Logit(y,x)
result = lr.fit().summary()
但是我想给我的观察数据设置不同的权重。我合并了四个大小不一样的数据集,想要给分析加权,这样最大的那个数据集的观察结果就不会在模型中占据主导地位。
2 个回答
1
不太确定关于statsmodel的事情,
不过用scikit-learn就简单多了。你可以使用一个叫做 SGDClassifier 的工具,并且可以设置样本权重。
举个例子:
import numpy as np
from sklearn import linear_model
X = [[0., 0.], [1., 1.]]
y = [0, 1]
weight=[0.5,0.5]
#log implies logistic regression
clf = linear_model.SGDClassifier(loss="log" )
clf.fit(X, y, sample_weight =weight)
print(clf.predict([[-0.8, -1]]))
6
我花了一些时间才搞明白,但其实在statsmodels里创建一个带权重的logit模型(也就是每一行可以有多个观察值)其实很简单。下面是具体的做法:
import statsmodels.api as sm
logmodel=sm.GLM(trainingdata[['Successes', 'Failures']], trainingdata[['const', 'A', 'B', 'C', 'D']], family=sm.families.Binomial(sm.families.links.logit)).fit()