所以我阅读了 scikit-learn 包 webpate:
我可以使用逻辑回归来拟合数据,在获得 LogisticRegression 的实例后,我可以使用它对新的数据点进行分类。到现在为止还挺好。
有没有办法设置 LogisticRegression() 实例的系数?因为在我获得训练好的系数后,我想使用相同的 API 对新的数据点进行分类。
或者也许其他人推荐了另一个具有更好 API 的 Python 机器学习包?
谢谢
所以我阅读了 scikit-learn 包 webpate:
我可以使用逻辑回归来拟合数据,在获得 LogisticRegression 的实例后,我可以使用它对新的数据点进行分类。到现在为止还挺好。
有没有办法设置 LogisticRegression() 实例的系数?因为在我获得训练好的系数后,我想使用相同的 API 对新的数据点进行分类。
或者也许其他人推荐了另一个具有更好 API 的 Python 机器学习包?
谢谢
系数是估计器对象的属性——你在实例化 Logistic 回归类时创建的——所以你可以用普通的 python 方式访问它们:
>>> import numpy as NP
>>> from sklearn import datasets
>>> from sklearn import datasets as DS
>>> digits = DS.load_digits()
>>> D = digits.data
>>> T = digits.target
>>> # instantiate an estimator instance (classifier) of the Logistic Reg class
>>> clf = LR()
>>> # train the classifier
>>> clf.fit( D[:-1], T[:-1] )
LogisticRegression(C=1.0, dual=False, fit_intercept=True,
intercept_scaling=1, penalty='l2', tol=0.0001)
>>> # attributes are accessed in the normal python way
>>> dx = clf.__dict__
>>> dx.keys()
['loss', 'C', 'dual', 'fit_intercept', 'class_weight_label', 'label_',
'penalty', 'multi_class', 'raw_coef_', 'tol', 'class_weight',
'intercept_scaling']
这就是如何获得系数,但如果您只想使用这些系数进行预测,更直接的方法是使用估计器的预测方法:
>>> # instantiate the L/R classifier, passing in norm used for penalty term
>>> # and regularization strength
>>> clf = LR(C=.2, penalty='l1')
>>> clf
LogisticRegression(C=0.2, dual=False, fit_intercept=True,
intercept_scaling=1, penalty='l1', tol=0.0001)
>>> # select some "training" instances from the original data
>>> # [of course the model should not have been trained on these instances]
>>> test = NP.random.randint(0, 151, 5)
>>> d = D[test,:] # random selected data points w/o class labels
>>> t = T[test,:] # the class labels that correspond to the points in d
>>> # generate model predictions for these 5 data points
>>> v = clf.predict(d)
>>> v
array([0, 0, 2, 0, 2], dtype=int32)
>>> # how well did the model do?
>>> percent_correct = 100*NP.sum(t==v)/t.shape[0]
>>> percent_correct
100
实际上,estimator.coef_
andestimator.intercept_
属性是只读的 Python 属性,而不是通常的 Python 属性。它们的值来自数组,该数组的内存布局直接映射了逻辑回归estimator.raw_coef_
的底层 C++ 实现的预期内存布局,以避免在调用或时对参数进行任何内存复制。liblinear
estimator.predict
estimator.predict_proba
我同意拥有只读属性是一个限制,我们应该找到一种方法来摆脱这些属性,但是如果我们重构这个实现,我们还应该注意不要引入任何不必要的内存副本,这在拥有一个快速查看源代码。
我在跟踪器上打开了一个问题,不要忘记这个限制。
同时,您可以阅读带@property
注释的estimator.coef_
方法以了解如何关联并直接更改estimator.coef_
值。estimator.raw_coef_
estimator.raw_coef_