Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
sklearn-cookbook-zh
提交
6267943a
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 搜索 >>
提交
6267943a
编写于
5月 23, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
3.5
上级
22e6302e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
90 addition
and
0 deletion
+90
-0
3.md
3.md
+90
-0
未找到文件。
3.md
浏览文件 @
6267943a
...
...
@@ -392,3 +392,93 @@ CPU times: user 34.6 s, sys: 3.17 s, total: 37.8 s Wall time: 44.6 s
```
显然,这就违背了问题的核心,但是这的确展示了重要东西。选择差劲的初始条件可能影响我们的模型,特别是聚类模型的收敛。使用 MiniBatch KMeans,全局最优是否能达到,是不一定的。
## 3.5 使用 KMeans 聚类来量化图像
图像处理是个重要的话题,其中聚类有一些应用。值得指出的是,Python 中有几种非常不错的图像处理库。Scikit-image 是 Scikit-learn 的“姐妹”项目。如果你打算做任何复杂的事情,都值得看一看它。
### 准备
我们在这篇秘籍中会有一些乐趣。目标是使用聚类来把图像变模糊。
首先,我们要利用 SciPy 来读取图像。图像翻译为三维数组,
`x`
和
`y`
坐标描述了高度和宽度,第三个维度表示每个图像的 RGB 值。
```
# in your terminal
$ wget http://blog.trenthauck.com/assets/headshot.jpg
```
### 操作步骤
现在,让我们在 Python 中读取图像:
```
py
>>>
from
scipy
import
ndimage
>>>
img
=
ndimage
.
imread
(
"headshot.jpg"
)
>>>
plt
.
imshow
(
img
)
```
下面就是图像:
![](
img/3-5-1.jpg
)
嘿,这就是(年轻时期的)作者。
既然我们已经有了图像,让我们检查它的维度:
```
py
>>>
img
.
shape
(
420
,
420
,
3
)
```
为了实际量化图像,我们需要将其转换为二维数组,长为
`420x420`
,宽为 RGB 值。思考它的更好的方法,是拥有一堆三维空间中的数据点,并且对点进行聚类来降低图像中的不同颜色的数量 -- 这是一个简单的量化方式。
首先,让我们使数组变形,它是个 NumPy 数组,所以非常简单:
```
py
>>>
x
,
y
,
z
=
img
.
shape
>>>
long_img
=
img
.
reshape
(
x
*
y
,
z
)
>>>
long_img
.
shape
(
176400
,
3
)
```
现在我们开始聚类过程。首先,让我们导入聚类模块,并创建 KMeans 对象。我们传入
`n_clusters=5`
,使我们拥有 5 个簇,或者实际上是 5 个不同颜色。
这是个不错的秘籍,我们使用前面提到的轮廓距离:
```
py
>>>
from
sklearn
import
cluster
>>>
k_means
=
cluster
.
KMeans
(
n_clusters
=
5
)
>>>
k_means
.
fit
(
long_img
)
```
既然我们已经训练了 KMeans 对象,让我们看看我们的眼色:
```
py
>>>
centers
=
k_means
.
cluster_centers_
>>>
centers
array
([[
142.58775848
,
206.12712986
,
226.04416873
],
[
86.29356543
,
68.86312505
,
54.04770507
],
[
194.36182899
,
172.19845258
,
149.65603813
],
[
24.67768412
,
20.45778933
,
16.19698314
],
[
149.27801776
,
132.19850659
,
115.32729167
]])
```
### 工作原理
既然我们拥有了形心,我们需要的下一个东西就是标签。它会告诉我们,哪个点关联哪个簇。
```
py
>>>
labels
=
k_means
.
labels_
>>>
labels
[:
5
]
array
([
1
,
1
,
1
,
1
,
1
],
dtype
=
int32
)
```
这个时候,我们需要最简的 NumPy 操作,之后是一个变形,我们就拥有的新的图像:
```
py
>>>
plt
.
imshow
(
centers
[
labels
].
reshape
(
x
,
y
,
z
))
```
下面就是产生的图像:
![](
img/3-5-2.jpg
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录