识别 sklearn 模型的 类
Identifying a sklearn-model's classes
SVMs 上的文档暗示存在一个名为 classes_
的属性,据称它揭示了模型如何在内部表示 类。
我想获取该信息,以便解释 predict_proba
等函数的输出,它为多个样本生成 类 的概率。希望知道给定一些说明值:
model.classes_
>>> [1, 2, 4]
意味着我可以假设这成立:
model.predict_proba([[1.2312, 0.23512, 6.01234], [3.7655, 8.2353, 0.86323]])
>>> [[0.032, 0.143, 0.825], [0.325, 0.143, 0.532]]
概率应转换为与 类 相同的顺序,即对于我可以假设的第一组特征:
probability of class 1: 0.032
probability of class 2: 0.143
probability of class 4: 0.825
但是在 SVM 上调用 classes_
会导致错误。有没有好的方法来获取这些信息?想不到模型训练好之后就不能访问了
编辑:
我构建模型的方式或多或少是这样的:
from sklearn.svm import SVC
from sklearn.grid_search import GridSearchCV
from sklearn.pipeline import Pipeline, FeatureUnion
pipeline = Pipeline([
('features', FeatureUnion(transformer_list[ ... ])),
('svm', SVC(probability=True))
])
parameters = { ... }
grid_search = GridSearchCV(
pipeline,
parameters
)
grid_search.fit(get_data(), get_labels())
clf = [elem for elem in grid_search.estimator.steps if elem[0] == 'svm'][0][1]
print(clf)
>> SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
kernel='rbf', max_iter=-1, probability=True, random_state=None,
shrinking=True, tol=0.001, verbose=False)
print(clf.classes_)
>> Traceback (most recent call last):
File "path/to/script.py", line 284, in <module>
File "path/to/script.py", line 181, in re_train
print(clf.classes_)
AttributeError: 'SVC' object has no attribute 'classes_'
sklearn
中有一个类字段,这可能是你调用错误的模型,看下面的例子,我们在查看时可以看到有类 classes_
字段:
>>> import numpy as np
>>> from sklearn.svm import SVC
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
>>> y = np.array([1, 1, 2, 2])
>>> clf = SVC(probability=True)
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
kernel='rbf', max_iter=-1, probability=True, random_state=None,
shrinking=True, tol=0.001, verbose=False)
>>> print clf.classes_
[1 2]
>>> print clf.predict([[-0.8, -1]])
[1]
>>> print clf.predict_proba([[-0.8, -1]])
[[ 0.92419129 0.07580871]]
您看到的grid_search.estimator
是未安装的管道。
classes_
属性仅在拟合后存在,因为分类器需要看到 y
.
你想要的是使用最佳参数设置训练的估计器,即 grid_search.best_estimator_
。
以下将起作用:
clf = grid_search.best_estimator_.named_steps['svm']
print(clf.classes_)
[并且 classes_ 完全按照您的想法行事]。
我相信这应该可以解决问题
arr = model.predict_proba(X)
list1 = arr.tolist()
cls = model.classes_
list2 = cls.tolist()
d = {''Category'':list2,''Probability'':list1[0]}
df = pd.DataFrame(d)
print(df)
SVMs 上的文档暗示存在一个名为 classes_
的属性,据称它揭示了模型如何在内部表示 类。
我想获取该信息,以便解释 predict_proba
等函数的输出,它为多个样本生成 类 的概率。希望知道给定一些说明值:
model.classes_
>>> [1, 2, 4]
意味着我可以假设这成立:
model.predict_proba([[1.2312, 0.23512, 6.01234], [3.7655, 8.2353, 0.86323]])
>>> [[0.032, 0.143, 0.825], [0.325, 0.143, 0.532]]
概率应转换为与 类 相同的顺序,即对于我可以假设的第一组特征:
probability of class 1: 0.032
probability of class 2: 0.143
probability of class 4: 0.825
但是在 SVM 上调用 classes_
会导致错误。有没有好的方法来获取这些信息?想不到模型训练好之后就不能访问了
编辑: 我构建模型的方式或多或少是这样的:
from sklearn.svm import SVC
from sklearn.grid_search import GridSearchCV
from sklearn.pipeline import Pipeline, FeatureUnion
pipeline = Pipeline([
('features', FeatureUnion(transformer_list[ ... ])),
('svm', SVC(probability=True))
])
parameters = { ... }
grid_search = GridSearchCV(
pipeline,
parameters
)
grid_search.fit(get_data(), get_labels())
clf = [elem for elem in grid_search.estimator.steps if elem[0] == 'svm'][0][1]
print(clf)
>> SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
kernel='rbf', max_iter=-1, probability=True, random_state=None,
shrinking=True, tol=0.001, verbose=False)
print(clf.classes_)
>> Traceback (most recent call last):
File "path/to/script.py", line 284, in <module>
File "path/to/script.py", line 181, in re_train
print(clf.classes_)
AttributeError: 'SVC' object has no attribute 'classes_'
sklearn
中有一个类字段,这可能是你调用错误的模型,看下面的例子,我们在查看时可以看到有类 classes_
字段:
>>> import numpy as np
>>> from sklearn.svm import SVC
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
>>> y = np.array([1, 1, 2, 2])
>>> clf = SVC(probability=True)
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
kernel='rbf', max_iter=-1, probability=True, random_state=None,
shrinking=True, tol=0.001, verbose=False)
>>> print clf.classes_
[1 2]
>>> print clf.predict([[-0.8, -1]])
[1]
>>> print clf.predict_proba([[-0.8, -1]])
[[ 0.92419129 0.07580871]]
您看到的grid_search.estimator
是未安装的管道。
classes_
属性仅在拟合后存在,因为分类器需要看到 y
.
你想要的是使用最佳参数设置训练的估计器,即 grid_search.best_estimator_
。
以下将起作用:
clf = grid_search.best_estimator_.named_steps['svm']
print(clf.classes_)
[并且 classes_ 完全按照您的想法行事]。
我相信这应该可以解决问题
arr = model.predict_proba(X)
list1 = arr.tolist()
cls = model.classes_
list2 = cls.tolist()
d = {''Category'':list2,''Probability'':list1[0]}
df = pd.DataFrame(d)
print(df)