Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
sklearn-cookbook-zh
提交
a735f1b5
S
sklearn-cookbook-zh
项目概览
OpenDocCN
/
sklearn-cookbook-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
sklearn-cookbook-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a735f1b5
编写于
5月 27, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
4.6
上级
f1f77fb7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
79 addition
and
0 deletion
+79
-0
4.md
4.md
+79
-0
未找到文件。
4.md
浏览文件 @
a735f1b5
...
...
@@ -677,3 +677,82 @@ SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
max_iter
=-
1
,
probability
=
False
,
random_state
=
None
,
shrinking
=
True
,
tol
=
0.001
,
verbose
=
False
)
```
## 4.6 使用多类分类来归纳
这个秘籍中,我们会了解多类分类。取决于你的算法选择,你可以轻松地实现多类分类,或者定义用于比较的模式。
### 准备
在处理线性模型,例如逻辑回归时,我们需要使用
`OneVsRestClassifier`
。这个模式会为每个类创建一个分类器。
### 操作步骤
首先,我们会查看一个决策树的粗略示例,用于拟合多类的数据集。我们之前讨论过,我们可以使用一些分类器获得多类,所以我们仅仅拟合示例来证明它可以工作,然后继续。
其次,我们实际上将
`OneVsRestClassifier`
合并进我的模型中:
```
py
>>>
from
sklearn
import
datasets
>>>
X
,
y
=
datasets
.
make_classification
(
n_samples
=
10000
,
n_classes
=
3
,
n_informative
=
3
)
>>>
from
sklearn.tree
import
DecisionTreeClassifier
>>>
dt
=
DecisionTreeClassifier
()
>>>
dt
.
fit
(
X
,
y
)
>>>
dt
.
predict
(
X
)
array
([
1
,
1
,
0
,
..,
2
,
1
,
1
])
```
你可以看到,我们能够以最低努力来拟合分类器。
现在,让我们转向多类分类器的案例中。这需要我们导入
`OneVsRestClassifier`
。我们也导入
`LogisticRegression `
。
```
py
>>>
from
sklearn.multiclass
import
OneVsRestClassifier
>>>
from
sklearn.linear_model
import
LogisticRegression
```
现在,我们覆盖
`LogisticRegression`
分类器,同时,注意我们可以使其并行化。如果我们想知道
`OneVsRestClassifier`
分类器如何工作,它仅仅是训练单独的模型,之后比较它们。所以,我们可以同时单独训练数据。
```
py
>>>
mlr
=
OneVsRestClassifier
(
LogisticRegression
(),
n_jobs
=
2
)
>>>
mlr
.
fit
(
X
,
y
)
>>>
mlr
.
predict
(
X
)
array
([
1
,
1
,
0
,
...,
2
,
1
,
1
])
```
### 工作原理
如果我们打算快速时间我们自己的
`OneVsRestClassifier`
,应该怎么做呢?
首先,我们需要构造一种方式,来迭代分类,并为每个分类训练分类器。之后,我们首先需要预测每个分类:
```
py
>>>
import
numpy
as
np
>>>
def
train_one_vs_rest
(
y
,
class_label
):
y_train
=
(
y
==
class_label
).
astype
(
int
)
return
y_train
>>>
classifiers
=
[]
>>>
for
class_i
in
sorted
(
np
.
unique
(
y
)):
l
=
LogisticRegression
()
y_train
=
train_one_vs_rest
(
y
,
class_i
)
l
.
fit
(
X
,
y_train
)
classifiers
.
append
(
l
)
```
好的,所以既然我们配置好了 OneVsRest 模式,我们需要做的所有事情,就是求出每个数据点对于每个分类器的可能性。我们之后将可能性最大的分类赋给数据点。
例如,让我们预测
`X[0]`
:
```
py
for
classifier
in
classifiers
>>>
print
classifier
.
predict_proba
(
X
[
0
])
[[
0.90443776
0.09556224
]]
[[
0.03701073
0.96298927
]]
[[
0.98492829
0.01507171
]]
```
你可以看到,第二个分类器(下标为
`1`
)拥有“正”的最大可能性,所以我们将这个点标为
`1`
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录