Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
sklearn-cookbook-zh
提交
f4941b98
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 搜索 >>
提交
f4941b98
编写于
5月 23, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
3.1
上级
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
108 addition
and
0 deletion
+108
-0
.gitignore
.gitignore
+2
-0
3.md
3.md
+106
-0
未找到文件。
.gitignore
0 → 100644
浏览文件 @
f4941b98
Thumbs.db
\ No newline at end of file
3.md
0 → 100644
浏览文件 @
f4941b98
# 第三章 使用距离向量构建模型
## 3.1 使用 KMeans 对数据聚类
聚类是个非常实用的技巧。通常,我们在采取行动时需要分治。考虑公司的潜在客户列表。公司可能需要将客户按类型分组,之后为这些分组划分职责。聚类可以使这个过程变得容易。
KMeans 可能是最知名的聚类算法之一,并且也是最知名的无监督学习技巧之一。
### 准备
首先,让我们看一个非常简单的聚类,之后我们再讨论 KMeans 如何工作。
```
py
>>>
from
sklearn.datasets
import
make_blobs
>>>
blobs
,
classes
=
make_blobs
(
500
,
centers
=
3
)
```
同样,由于我们绘制一些图表,导入
`matplotlib`
,像这样:
```
py
>>>
import
matplotlib.pyplot
as
plt
```
### 操作步骤
我们打算浏览一个简单的例子,它对伪造数据进行聚类。之后我们会稍微谈论一下,KMeans 如何工作,来寻找最优的块数量。
看一看我们的数据块,我们可以看到,有三个不同的簇。
```
>>> f, ax = plt.subplots(figsize=(7.5, 7.5))
>>> ax.scatter(blobs[:, 0], blobs[:, 1], color=rgb[classes])
>>> rgb = np.array(['r', 'g', 'b'])
>>> ax.set_title("Blobs")
```
输出如下:
![](
img/3-1-1.jpg
)
现在我们可以使用 KMeans 来寻找这些簇的形心。第一个例子中,我们假装知道有三个形心。
```
>>> from sklearn.cluster import KMeans
>>> kmean = KMeans(n_clusters=3)
>>> kmean.fit(blobs)
KMeans(copy_x=True, init='k-means++', max_iter=300, n_clusters=3,
n_init=10, n_jobs=1, precompute_distances=True,
random_state=None, tol=0.0001, verbose=0)
>>> kmean.cluster_centers_ array([[ 0.47819567, 1.80819197],
[ 0.08627847, 8.24102715],
[ 5.2026125 , 7.86881767]])
>>> f, ax = plt.subplots(figsize=(7.5, 7.5))
>>> ax.scatter(blobs[:, 0], blobs[:, 1], color=rgb[classes])
>>> ax.scatter(kmean.cluster_centers_[:, 0],
kmean.cluster_centers_[:, 1], marker='*', s=250,
color='black', label='Centers')
>>> ax.set_title("Blobs")
>>> ax.legend(loc='best')
```
下面的截图展示了输出:
![](
img/3-1-2.jpg
)
其它属性也很实用。例如,
`labels_`
属性会产生每个点的预期标签。
```
py
>>>
kmean
.
labels_
[:
5
]
array
([
1
,
1
,
2
,
2
,
1
],
dtype
=
int32
)
```
我们可以检查,例如,
`labels_`
是否和类别相同,但是由于 KMeans 不知道类别是什么,它不能给两个类别分配相同的索引值:
```
>>> classes[:5]
array([0, 0, 2, 2, 0])
```
将类别中的
`1`
变成
`0`
来查看是否与
`labels_`
匹配。
`transform`
函数十分有用,它会输出每个点到形心的距离。
```
py
>>>
kmean
.
transform
(
blobs
)[:
5
]
array
([[
6.47297373
,
1.39043536
,
6.4936008
],
[
6.78947843
,
1.51914705
,
3.67659072
],
[
7.24414567
,
5.42840092
,
0.76940367
],
[
8.56306214
,
5.78156881
,
0.89062961
],
[
7.32149254
,
0.89737788
,
5.12246797
]])
```
### 工作原理
KMeans 实际上是个非常简单的算法,它使簇中的点到均值的距离的平方和最小。
首先它会设置一个预定义的簇数量
`K`
,之后执行这些事情:
+
将每个数据点分配到最近的簇中。
+
通过计算初中每个数据点的均值,更新每个形心。
直到满足特定条件。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录