python 实现kmeans固定值
时间: 2023-08-30 15:11:09 浏览: 128
可以使用sklearn库中的KMeans算法来实现python中的kmeans固定值。具体的实现代码如下:
```python
from sklearn.cluster import KMeans
# 数据集
X = [[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]]
# 聚类的数量
k = 2
# 构建KMeans模型
kmeans = KMeans(n_clusters=k, random_state=0)
# 进行聚类
kmeans.fit(X)
# 获取聚类结果
labels = kmeans.labels_
```
在上述代码中,使用sklearn库中的KMeans模型来实现kmeans聚类,其中需要指定聚类的数量参数n_clusters,使用random_state设置随机数种子,让每次运行的结果相同。最后通过labels属性来获取聚类结果。
相关问题
MAD算法如何自适应调整融合了KMeans的CLAHE的阈值代码python
MAD (Median Absolute Deviation) 是一种鲁棒的统计方法,可以用来自适应调整融合了 KMeans 的 CLAHE 的阈值。
具体步骤如下:
1. 对于每个图像块,使用 KMeans 算法将其分为若干个子块,每个子块的灰度值相近。
2. 对于每个子块,计算其中像素值的 MAD 值,作为该子块的阈值。
3. 对于整张图像,使用 CLAHE 算法进行直方图均衡化,但是使用每个子块的阈值作为对应子块的阈值。
4. 如果整张图像的亮度过于明亮或暗淡,可以根据整张图像的 MAD 值调整阈值。如果 MAD 值较小,则将所有子块的阈值增加一个固定值;如果 MAD 值较大,则将所有子块的阈值减少一个固定值。
代码实现如下:
```python
import numpy as np
from skimage.filters import median
from skimage.filters.rank import median as median_rank
from skimage.exposure import equalize_adapthist
from sklearn.cluster import KMeans
def mad_clahe(image, block_size=32, kmeans_k=4, delta=40):
# Step 1: Use KMeans to cluster each block of image into k clusters
kmeans = KMeans(n_clusters=kmeans_k, random_state=0)
block_shape = (block_size, block_size)
blocks = view_as_blocks(image, block_shape)
n_blocks = blocks.shape[0] * blocks.shape[1]
block_centers = np.zeros((n_blocks, kmeans_k))
for i in range(blocks.shape[0]):
for j in range(blocks.shape[1]):
block = blocks[i, j]
block_flat = block.reshape((-1, 1))
kmeans.fit(block_flat)
block_centers[i * blocks.shape[1] + j] = kmeans.cluster_centers_.ravel()
# Step 2: Calculate threshold for each block as median absolute deviation
block_mads = np.median(np.abs(block_centers - np.median(block_centers, axis=1, keepdims=True)), axis=1)
# Step 3: Apply CLAHE on image with adaptive thresholds
adaptive_thresholds = block_mads.reshape(blocks.shape[0], blocks.shape[1])
image_clahe = np.zeros_like(image)
for i in range(blocks.shape[0]):
for j in range(blocks.shape[1]):
block = blocks[i, j]
block_clahe = equalize_adapthist(block, clip_limit=0.03, kernel_size=None, nbins=256, adaptive_clip_limit=True, clip_limit_range=None, mask=None, nbins_above_high=None, nbins_below_low=None, channel_axis=None)
image_clahe[i * block_size:(i + 1) * block_size, j * block_size:(j + 1) * block_size] = block_clahe
# Step 4: Adjust thresholds according to global MAD value
global_mad = np.median(np.abs(image_clahe - np.median(image_clahe)))
if global_mad < delta:
adaptive_thresholds += delta
else:
adaptive_thresholds -= delta
# Final step: Apply median filter on enhanced image
image_enhanced = median_rank(image_clahe, selem=disk(1))
return image_enhanced
```
其中,`image` 是待增强的图像,`block_size` 是每个块的大小,`kmeans_k` 是 KMeans 算法中的聚类数目,`delta` 是调整阈值时的增量。
这段代码使用了 `sklearn.cluster.KMeans` 来进行聚类,使用了 `skimage.filters.rank.median` 来进行局部中值滤波,使用了 `skimage.exposure.equalize_adapthist` 来进行自适应直方图均衡化。
sklearn KMeans参数
Sklearn中的KMeans参数包括:
- n_clusters:表示我们希望将数据分成多少个类别。这是KMeans中的k值,也是唯一必填的参数。默认为8类,但我们可以通过观察数据分布来选择合适的值作为输入。
- init:表示初始质心的放置方法。默认为'k-means++',它会智能地选择初始质心以加快算法的收敛速度。还可以通过设置为'random'来随机选择初始质心。
- random_state:用于确定初始质心的随机数发生器的种子。默认为None,每次运行算法都会得到不同的结果。如果需要可重现的结果,可以指定一个固定的随机种子值。
- n_init:表示运行KMeans算法的次数。默认为10次,每次使用不同的随机初始质心。最后会选择具有最低误差的结果作为输出。
Calinski-Harabasz指数(Calinski-Harabasz Index)可以用来评估聚类结果的质量,对应的方法是metrics.calinski_harabaz_score。该指数值越大,表示聚类结果越好。
总结起来,KMeans算法的参数有n_clusters、init、random_state和n_init,可以通过调整这些参数来获得更好的聚类结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [调用sklearn库的K-Means聚类分析实例](https://download.csdn.net/download/zhaohaibo_/10225230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [python的scikit-learn机器学习库实现kmeans聚类(参数、方法、实例、评估)](https://blog.csdn.net/weixin_43251493/article/details/104855324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [sklearn之kmeans](https://blog.csdn.net/weixin_45580742/article/details/104493924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文