%matplotlib inline from sklearn.cluster import KMeans#导入sklearn中kmeans聚类包 import numpy as np from matplotlib import pyplot as plt import sklearn.datasets as datasets iris=datasets.load_iris() #1 查看iris包括哪些信息,比如数据,label等。将这些信息打印出来; #2 信息中是否已包含每一样本所属的类?没聚类之彰,是否可以打印iris每一个label的样本个数; #3 画出第一类label的前两列的散点图; #4 用KMeans对数据进行聚类; #5 打印各聚类中心; #6 打印聚类后几个点的类标号; #7 打印迭代次数; #8 说明以下代码的作用: data=iris.data k=[] for i in range(1,20): km=KMeans(n_clusters=i,init='random',n_init=10,max_iter=200,tol=1e-04,random_state=0) km.fit(data) # inertia_:Sum of squared distances of samples to their closest cluster center. k.append(km.inertia_) plt.plot(range(1,20),k,marker='o') plt.xlabel('Number of cluster') plt.ylabel('Distorton') #9 使用BIRCH算法对iris进行了聚类,将同一类中的前两维用相同的颜色画出来。 #10 使用DBSCAN算法对iris进行了聚类,将同一类中的前两维用相同的颜色画出来。
时间: 2024-02-04 21:03:52 浏览: 27
1. iris包括数据和标签,数据存储在iris.data中,标签存储在iris.target中,类别名称存储在iris.target_names中,特征名称存储在iris.feature_names中。
```python
print("数据信息:\n", iris.data)
print("标签信息:\n", iris.target)
print("类别名称:\n", iris.target_names)
print("特征名称:\n", iris.feature_names)
```
2. 信息中包含每一样本所属的类,通过iris.target可以获取每个样本所属的类别。未聚类之前,可以通过np.bincount(iris.target)计算每个类别的样本个数。
```python
print("每个类别的样本个数:\n", np.bincount(iris.target))
```
3. 画出第一类label的前两列的散点图。
```python
plt.scatter(iris.data[iris.target == 0, 0], iris.data[iris.target == 0, 1])
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()
```
4. 用KMeans对数据进行聚类。
```python
km = KMeans(n_clusters=3, init='random', n_init=10, max_iter=200, tol=1e-04, random_state=0)
km.fit(iris.data)
```
5. 打印各聚类中心。
```python
print("聚类中心:\n", km.cluster_centers_)
```
6. 打印聚类后几个点的类标号。
```python
print("聚类后几个点的类标号:\n", km.labels_[:5])
```
7. 打印迭代次数。
```python
print("迭代次数:\n", km.n_iter_)
```
8. 代码的作用是选择最优的聚类数量,通过计算不同聚类数量下的聚类误差(SSE)来选择最优的聚类数量,将结果用图像展示出来。
```python
data = iris.data
k = []
for i in range(1, 20):
km = KMeans(n_clusters=i, init='random', n_init=10, max_iter=200, tol=1e-04, random_state=0)
km.fit(data)
# inertia_:Sum of squared distances of samples to their closest cluster center.
k.append(km.inertia_)
plt.plot(range(1, 20), k, marker='o')
plt.xlabel('Number of cluster')
plt.ylabel('Distorton')
plt.show()
```
9. 使用BIRCH算法对iris进行聚类,并将同一类中的前两维用相同的颜色画出来。
```python
from sklearn.cluster import Birch
birch = Birch(n_clusters=3)
birch.fit(iris.data)
labels = birch.labels_
plt.scatter(iris.data[labels == 0, 0], iris.data[labels == 0, 1], c='red')
plt.scatter(iris.data[labels == 1, 0], iris.data[labels == 1, 1], c='blue')
plt.scatter(iris.data[labels == 2, 0], iris.data[labels == 2, 1], c='green')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()
```
10. 使用DBSCAN算法对iris进行聚类,并将同一类中的前两维用相同的颜色画出来。
```python
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(iris.data)
labels = dbscan.labels_
plt.scatter(iris.data[labels == 0, 0], iris.data[labels == 0, 1], c='red')
plt.scatter(iris.data[labels == 1, 0], iris.data[labels == 1, 1], c='blue')
plt.scatter(iris.data[labels == -1, 0], iris.data[labels == -1, 1], c='green')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()
```