python针对心脏病数据集实现kmeans算法,测试数据标准化对kmeans算法的影响。
时间: 2023-08-05 12:02:43 浏览: 145
好的,下面我将给出实现KMeans算法并测试数据标准化对其影响的Python代码。
首先,我们需要加载心脏病数据集。这里使用sklearn库提供的数据集。
```python
from sklearn.datasets import load_heart_disease
import pandas as pd
data = load_heart_disease()
df = pd.DataFrame(data.data, columns=data.feature_names)
```
接着,我们需要对数据进行标准化处理。这是因为KMeans算法中涉及到距离计算,而不同特征的数值范围可能会导致距离计算的偏向。因此,标准化可以将各个特征的数值范围缩放到相同的范围内,避免这种偏向。
```python
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
df_std = ss.fit_transform(df)
```
然后,我们可以开始实现KMeans算法。这里使用sklearn库提供的KMeans类。
```python
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=2) # 设置簇数为2
kmeans.fit(df_std)
pred = kmeans.predict(df_std)
```
最后,我们可以比较标准化和非标准化数据的聚类效果。可以使用sklearn库提供的metrics模块来计算聚类效果的评价指标。
```python
from sklearn import metrics
# 不标准化数据的评价指标
print("不标准化数据的评价指标:")
print("Calinski-Harabasz score:", metrics.calinski_harabasz_score(df, pred))
print("Silhouette Coefficient:", metrics.silhouette_score(df, pred))
# 标准化数据的评价指标
print("标准化数据的评价指标:")
print("Calinski-Harabasz score:", metrics.calinski_harabasz_score(df_std, pred))
print("Silhouette Coefficient:", metrics.silhouette_score(df_std, pred))
```
完整代码如下:
```python
from sklearn.datasets import load_heart_disease
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn import metrics
data = load_heart_disease()
df = pd.DataFrame(data.data, columns=data.feature_names)
# 标准化
ss = StandardScaler()
df_std = ss.fit_transform(df)
# KMeans算法
kmeans = KMeans(n_clusters=2) # 设置簇数为2
kmeans.fit(df_std)
pred = kmeans.predict(df_std)
# 不标准化数据的评价指标
print("不标准化数据的评价指标:")
print("Calinski-Harabasz score:", metrics.calinski_harabasz_score(df, pred))
print("Silhouette Coefficient:", metrics.silhouette_score(df, pred))
# 标准化数据的评价指标
print("标准化数据的评价指标:")
print("Calinski-Harabasz score:", metrics.calinski_harabasz_score(df_std, pred))
print("Silhouette Coefficient:", metrics.silhouette_score(df_std, pred))
```
运行结果可能会有一些波动,但大概率是标准化后的评价指标更好。
阅读全文