Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定sklearn模型';s类_Python_Scikit Learn_Svm - Fatal编程技术网

Python 确定sklearn模型';s类

Python 确定sklearn模型';s类,python,scikit-learn,svm,Python,Scikit Learn,Svm,上的文档表明存在一个名为classes_uuu的属性,该属性据称揭示了模型如何在内部表示类 我希望获得这些信息,以便解释像predict\u probaba这样的函数的输出,它为许多样本生成类的概率。希望知道,给定一些说明性的值: model.classes_ >>> [1, 2, 4] 这意味着我可以假设: model.predict_proba([[1.2312, 0.23512, 6.01234], [3.7655, 8.2353, 0.86323]]) >&

上的文档表明存在一个名为
classes_uuu
的属性,该属性据称揭示了模型如何在内部表示类

我希望获得这些信息,以便解释像
predict\u probaba
这样的函数的输出,它为许多样本生成类的概率。希望知道,给定一些说明性的值:

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上调用
类会导致错误。有没有一个好方法来获取这些信息?我无法想象,在模型经过训练后,它将不再可访问


编辑: 我构建模型的方式大致如下:

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.svm导入SVC
从sklearn.grid\u搜索导入GridSearchCV
从sklearn.pipeline导入管道,FeatureUnion
管道=管道([
(“功能”,功能联合(变压器列表[…]),
('svm',SVC(概率=真))
])
参数={…}
grid_search=GridSearchCV(
管道
参数
)
网格搜索.fit(获取数据(),获取标签())
clf=[elem for elem in grid_search.estimator.steps if elem[0]=='svm'][0][1]
打印(clf)
>>SVC(C=1.0,缓存大小=200,类权重=None,coef0=0.0,度=3,伽马=0.0,
kernel='rbf',max\u iter=-1,概率=True,随机状态=None,
收缩=真,tol=0.001,详细=假)
打印(clf.类别)
>>回溯(最近一次呼叫最后一次):
文件“path/to/script.py”,第284行,在
文件“path/to/script.py”,第181行,在REU列中
打印(clf.类别)
AttributeError:“SVC”对象没有属性“classes”

sklearn
中有一个classes字段,这可能意味着您调用了错误的模型,请参见下面的示例,我们可以在查看
classes\uuu
字段时看到有类:

>>> 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\u search.estimator
是不适合的管道。
classes\uu
属性仅在拟合后存在,因为分类器需要看到
y

您想要的是使用最佳参数设置训练的估计器,即
grid\u search.best\u estimator\u

以下工作将起作用:

clf = grid_search.best_estimator_.named_steps['svm']
print(clf.classes_)

[而且类的作用与你认为的完全一样]。

我相信这应该能起到作用

arr=model.predict\u proba(X)
列表1=arr.tolist()
cls=model.class_
list2=cls.tolist()
d={“类别”:列表2,“概率”:列表1[0]}
df=pd.数据帧(d)
打印(df)

我明白了。也许我的问题是,我的模型“隐藏”在GridSearchCV中。我用更多信息和更具体的错误消息更新了最初的帖子。