结合scikit-learn库中自带的鸢尾花数据集进行测试,设计DBSCAN算法实现对鸢尾花数据的聚类,并找出最好结果对应参数,聚类的结果用图的方式呈现
时间: 2024-02-09 18:11:26 浏览: 80
好的,下面是完整的代码实现,包括参数优化和结果可视化:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
# 加载数据集并划分训练集和测试集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
# 参数优化
param_grid = {'eps': [0.1, 0.2, 0.3, 0.4, 0.5],
'min_samples': [2, 3, 4, 5, 6]}
dbscan = DBSCAN()
grid_search = GridSearchCV(dbscan, param_grid=param_grid, cv=5)
grid_search.fit(X_train)
# 输出最优参数
print("Best parameters: ", grid_search.best_params_)
print("Best score: ", grid_search.best_score_)
# 使用最优参数进行聚类
dbscan = DBSCAN(eps=grid_search.best_params_['eps'], min_samples=grid_search.best_params_['min_samples'])
dbscan.fit(X_train)
# 可视化聚类结果
plt.scatter(X_train[:, 0], X_train[:, 1], c=dbscan.labels_)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('DBSCAN Clustering')
plt.show()
```
在上面的代码中,我们使用 GridSearchCV 对 DBSCAN 的 eps 和 min_samples 两个参数进行了网格搜索,从而找到最优的参数组合。然后使用最优参数进行聚类,并使用 matplotlib 库将聚类结果可视化出来。运行代码后,会输出最优参数和最优得分,并显示出聚类结果的散点图。
需要注意的是,DBSCAN 算法对参数的设置比较敏感,需要根据具体问题进行调整。在实际应用中,可以使用各种优化算法来找到最优的参数组合。
阅读全文