基于sklearn的cluster包中提供的方法实现kmeans聚类算法,完整源码
时间: 2024-09-30 18:10:59 浏览: 35
基于Scikit-learn库的KMeans聚类算法是一种无监督学习方法,主要用于将数据集划分为若干个簇(clusters)。以下是使用Scikit-learn的`KMeans`类来实现K-means的基本步骤和部分源码:
```python
from sklearn.cluster import KMeans
import numpy as np
# 创建KMeans实例
kmeans = KMeans(n_clusters=3) # 选择3个簇
# 假设你有一个二维numpy数组作为输入数据
data = np.array([[5, 8], [1, 2], [9, 4], [4, 7], [6, 6], [3, 3]]) # 示例数据
# 使用fit()方法训练模型
kmeans.fit(data)
# 获取每个样本所属的簇标签
labels = kmeans.labels_
# 可视化结果,如果使用的是matplotlib,可以这样做
centroids = kmeans.cluster_centers_
plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=100, linewidths=3, color='red')
#
相关问题
文本聚类kmeans 源码实现
以下是基于Python的K-Means聚类算法的实现代码:
```python
import numpy as np
class KMeans:
def __init__(self, k=2, max_iterations=500):
self.k = k
self.max_iterations = max_iterations
def fit(self, data):
self.centroids = []
for i in range(self.k):
self.centroids.append(data[np.random.randint(0, len(data) - 1)])
for i in range(self.max_iterations):
clusters = [[] for _ in range(self.k)]
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in self.centroids]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(point)
prev_centroids = self.centroids.copy()
for i in range(self.k):
self.centroids[i] = np.average(clusters[i], axis=0)
optimized = True
for i in range(self.k):
if not np.array_equal(self.centroids[i], prev_centroids[i]):
optimized = False
if optimized:
break
def predict(self, data):
predictions = []
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in self.centroids]
cluster_index = np.argmin(distances)
predictions.append(cluster_index)
return predictions
```
这个实现中,我们使用了numpy库来处理数据和计算矩阵运算,同时也使用了Python在列表操作方面的优点。在初始化时,我们设定了聚类数k和最大迭代次数max_iterations。在训练过程中,我们随机初始化了k个中心点,并且使用欧几里得距离度量来计算每个点到每个中心点的距离。使用最小距离法来将每个点分配到对应的簇中。然后,我们重新计算每个簇的中心点,并测试是否收敛。如果收敛,则停止迭代。最后,predict方法可以用来对新数据进行预测,返回的是数据所属的簇索引。
阅读全文