python导入csv数据用来做聚类分析,并采用肘部法则来确定K值,同时输出K值为3时的3D可视化图
时间: 2024-02-13 09:59:51 浏览: 102
python中使用k-means聚类.zip_k-means聚类算法_python_python 用kmeans_聚类_聚类 P
好的,这个问题我可以回答。首先,我们需要导入一些必要的库:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.cluster import KMeans
```
然后,读入csv数据:
```python
data = pd.read_csv('data.csv')
```
接着,我们需要对数据进行处理,去除不必要的列,将数据转化为矩阵形式:
```python
data.drop(['name'], axis=1, inplace=True) # 去除不必要的列
X = np.array(data) # 转化为矩阵形式
```
现在,我们可以使用肘部法则来确定K值。肘部法则的原理是:随着聚类数K的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当K小于真实的类别数时,由于K的增大只会使得每个簇的聚合程度变好,因此SSE的下降幅度会很大,而当K到达真实的类别数时,再增加K所得到的聚合程度回报会迅速变小,因此SSE的下降幅度会骤减,然后随着K值的继续增大而趋于平缓,也就是呈现出肘部。
具体实现如下:
```python
SSE = []
for k in range(1, 10):
estimator = KMeans(n_clusters=k)
estimator.fit(X)
SSE.append(estimator.inertia_) # estimator.inertia_是计算SSE的方法
X1 = range(1, 10)
X2 = SSE
plt.xlabel('K')
plt.ylabel('SSE')
plt.plot(X1, X2, 'o-')
plt.show()
```
运行完上面的代码后,我们会得到一个SSE和K值的关系图。可以看到,K值为3时,SSE的下降幅度变化最大,而且SSE之后的下降幅度变化比较平缓,因此我们可以选择K=3作为聚类数。
最后,我们可以将聚类结果进行可视化。由于数据是3维的,我们可以使用3D图像进行展示:
```python
estimator = KMeans(n_clusters=3)
estimator.fit(X)
label_pred = estimator.labels_ # 获取聚类标签
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=label_pred)
plt.show()
```
这段代码可以实现K值为3时的3D可视化图。
阅读全文