编写python代码 利用sklearn中的方法对鸢尾花数据集实现k-means算法
时间: 2024-03-14 07:47:06 浏览: 79
好的,下面是对鸢尾花数据集实现k-means算法的Python代码:
```python
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
# 指定聚类的个数
k = 3
# 创建KMeans对象,并进行聚类
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)
# 输出聚类的结果
print("聚类中心点:\n", kmeans.cluster_centers_)
print("聚类结果:\n", kmeans.labels_)
```
在上述代码中,首先我们加载了sklearn中自带的鸢尾花数据集,然后指定了聚类的个数为3。接着,我们创建了一个KMeans对象,并调用fit方法进行聚类。最后,我们通过输出聚类中心点和聚类结果来查看聚类的效果。
需要注意的是,这只是一个简单的示例代码,实际使用中可能需要根据具体情况进行调参等操作。
相关问题
根据鸢尾花数据集,利用sklearn中的方法实现k-means算法
好的,我可以为您介绍实现K-means算法的步骤:
1. 导入必要的库和数据集:
```python
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
iris = load_iris()
X = iris.data
```
2. 确定k值,即聚类的数量。这里我们设定k=3。
```python
k = 3
```
3. 定义KMeans模型并进行训练:
```python
kmeans = KMeans(n_clusters=k, random_state=0)
kmeans.fit(X)
```
4. 绘制聚类结果,可以使用不同的颜色来表示不同的聚类。
```python
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='^', s=100, linewidths=3, color='r')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()
```
完整的代码如下:
```python
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
iris = load_iris()
X = iris.data
k = 3
kmeans = KMeans(n_clusters=k, random_state=0)
kmeans.fit(X)
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='^', s=100, linewidths=3, color='r')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()
```
这样就能够基于鸢尾花数据集,利用sklearn中的方法实现k-means算法了。
用Python代码分别使用K-means、K-medoids和 DBSCAN 算法对sklearn 中的鸢尾花数据集进 行聚类(聚类数目设置为3),并评估这3种聚类算法的准确率的代码实现
首先,让我们安装必要的库,如果还没有安装的话:
```bash
pip install scikit-learn numpy pandas matplotlib
```
接下来,我们将分别使用 K-means、K-medoids 和 DBSCAN 进行聚类,并使用 sklearn 的鸢尾花数据集。由于 K-medoids 实现不在 sklearn 内置,我们通常需要使用第三方库如 `scipy` 或 `imblearn`,这里我将使用 `imblearn` 来简化 K-medoids 的实现。
```python
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.cluster import KMeans, DBSCAN
from sklearn.metrics import accuracy_score, confusion_matrix
from imblearn.metrics import make_accuracy_scorer
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 只选择前两个主成分以便于展示
y = iris.target
# 对比的聚类算法
methods = [
('K-Means', KMeans(n_clusters=3)),
('K-Medoids', make.medoid_clustering(KMedoids(n_clusters=3))),
('DBSCAN', DBSCAN(eps=0.5, min_samples=5)) # 聚类参数调整可能会有所不同
]
# 计算每个方法的预测结果
results = []
for name, method in methods:
method.fit(X)
y_pred = method.predict(X)
results.append((name, y_pred))
# 评估聚类效果
accuracies = []
confusion_matrices = []
for name, pred in results:
acc = accuracy_score(y, pred)
accuracies.append(acc)
cm = confusion_matrix(y, pred, labels=np.arange(3))
print(f"{name} 准确率:{acc:.2f}")
print(f"混淆矩阵:\n{cm}\n")
confusions_matrices.append(cm)
# 结果对比
print("所有方法的准确率比较:")
for i, (method_name, acc) in enumerate(zip(methods, accuracies)):
print(f"{i+1}. {method_name[0]}: {acc*100:.2f}%")
#
阅读全文