python实现k-means算法使用Iris数据集简单版,不用外模块或者调用包
时间: 2024-12-02 22:17:56 浏览: 30
Python实现K-Means算法通常会用到`numpy`库来进行数值计算,而`sklearn`库提供了方便的数据处理和模型评估功能。不过,如果你想要一个不依赖外部库的简单版本,我们可以手写一些基本函数。首先,你需要了解Iris数据集的基本结构,它是一个包含4个特征和3种花卉类型的经典数据集。
以下是一个简单的K-Means算法实现,仅用于Iris数据集:
```python
import numpy as np
# 假设我们已经有了预处理后的Iris数据,保存在iris_data变量里,每行代表一个样本,每列是4个特征
# 可能需要手动划分训练集和测试集,这里省略了这部分
class KMeans:
def __init__(self, k=3): # 初始化,设定聚类数
self.k = k
self.centroids = None
def initialize_centroids(self, data):
# 随机选择初始质心
idxs = np.random.choice(range(data.shape[0]), size=self.k, replace=False)
self.centroids = data[idxs]
def assign_clusters(self, data):
# 计算每个样本到各个质心的距离,找到最近的一个
distances = np.linalg.norm(data[:, np.newaxis] - self.centroids, axis=-1)
return np.argmin(distances, axis=1)
def update_centroids(self, data, assignments):
new_centroids = []
for i in range(self.k):
cluster_samples = data[assignments == i]
if not cluster_samples.any():
continue # 如果某个簇为空,则更新为随机点
new_centroids.append(np.mean(cluster_samples, axis=0))
self.centroids = np.array(new_centroids)
def fit(self, data):
self.initialize_centroids(data)
while True:
assignments = self.assign_clusters(data)
self.update_centroids(data, assignments)
if np.allclose(self.centroids, self.prev_centroids): # 判断是否收敛
break
self.prev_centroids = self.centroids.copy()
def run_kmeans(iris_data, num_iterations=100):
kmeans = KMeans(k=3) # 假设我们有3种类别
kmeans.fit(iris_data, num_iterations)
clusters = kmeans.assign_clusters(iris_data)
return clusters
# 使用方法:
# clusters = run_kmeans(iris_data)
```
这个例子中,我们假设已经有一个预处理过的Iris数据`iris_data`。注意,这个实现并没有包括距离计算、停止条件判断等优化细节,只是一个基础版的K-Means。在实际项目中,你可能会希望使用更完善的库如`scikit-learn`来简化流程。
阅读全文