数据源:
一个啤酒的数据源,为了方便演示,数据只有20行。
代码:
import pandas as pd
from sklearn.cluster import DBSCAN
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn import metrics
# 读取数据源
beer = pd.read_csv('E:/file/data.txt', sep=' ')
X = beer[["calories","sodium","alcohol","cost"]]
# 训练数据源
db = DBSCAN(eps=10, min_samples=2).fit(X)
# 加上标签
labels = db.labels_
beer['cluster_db'] = labels
beer.sort_values('cluster_db')
# 画图
colors = np.array(['red', 'green', 'blue', 'yellow'])
pd.scatter_matrix(X, c=colors[beer.cluster_db], figsize=(10,10), s=100)
plt.show()
# 验证模型效果
score_scaled = metrics.silhouette_score(X,beer.cluster_db)
print("使用DBSCAN的模型效果:")
print(score_scaled)
测试记录:
使用DBSCAN的模型效果:
0.49530955296776086
分析:
从评分及可视化效果来看,聚类效果不理想,不如K-Means效果。
对于样本集复杂的使用DBSCAN。
对于样本集简单的直接使用K-Means即可。