import pandas as pd from sklearn.cluster import DBSCAN from sklearn.metrics import confusion_matrix import matplotlib.pyplot as plt # 读取Excel数据 data = pd.read_excel('C:/Users/86178/Desktop/test/test/TF-IDF/SSG hole span版.xlsx') # 提取特征列 feature_columns = ["Bridge length (m)","Pier type","Foundation type","Hole","Span (m)", "Bearing type","Plane linear"] X = data[feature_columns] # 使用DBSCAN进行聚类 dbscan = DBSCAN(eps=0.5, min_samples=5) dbscan.fit(X) # 获取聚类结果 labels = dbscan.labels_
时间: 2024-04-09 15:33:05 浏览: 127
你的代码看起来基本上是正确的,但是在使用DBSCAN进行聚类之后,你可以使用混淆矩阵(confusion matrix)来评估聚类结果的准确性,而不是直接使用聚类标签。混淆矩阵可以显示实际类别与聚类标签之间的对应关系。
以下是一个示例代码,展示了如何计算混淆矩阵并将其绘制成热力图:
```python
import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# 读取Excel数据
data = pd.read_excel('C:/Users/86178/Desktop/test/test/TF-IDF/SSG hole span版.xlsx')
# 提取特征列
feature_columns = ["Bridge length (m)","Pier type","Foundation type","Hole","Span (m)",
"Bearing type","Plane linear"]
X = data[feature_columns]
# 使用DBSCAN进行聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X)
# 获取聚类结果
labels = dbscan.labels_
# 获取实际类别(如果有的话)
# actual_labels = data["actual_label_column"]
# 计算混淆矩阵
confusion_mat = confusion_matrix(actual_labels, labels)
# 绘制热力图
sns.heatmap(confusion_mat, annot=True, cmap="YlGnBu")
plt.xlabel('Predicted Labels')
plt.ylabel('Actual Labels')
plt.title('Confusion Matrix')
plt.show()
```
请将上述代码中的`actual_label_column`替换为你数据中实际的类别列,如果没有实际类别可以注释掉该行代码。然后运行脚本,就能够得到混淆矩阵并绘制成热力图了。
希望能对你有所帮助!如果有任何问题,请随时提问。
阅读全文