X,Y = make_moons(n_samples=400,shuffle=True,noise=0.1,random_state=136)这份数据集,这份数据集的标签是0或1。用手写K-Means++,DBSCAN,AGNES这三种算法,这三种算法分别用什么参数能使准确率达到百分之百。写出代码
时间: 2024-03-17 08:43:24 浏览: 67
K-Means++算法代码实现所用到的数据集
对于这份数据集,因为是二分类任务,所以准确率达到百分之百指的是将所有样本都正确分类。
以下是手写K-Means++,DBSCAN和AGNES的代码以及能够使得准确率达到百分之百的参数:
K-Means++:
```python
import numpy as np
def k_means_pp(X, K, random_state=0):
np.random.seed(random_state)
centroids = np.zeros((K, X.shape[1]))
centroids[0] = X[np.random.choice(X.shape[0])]
for i in range(1, K):
distances = np.zeros(X.shape[0])
for j in range(i):
distances += np.linalg.norm(X - centroids[j], axis=1)
centroids[i] = X[np.argmax(distances)]
clusters = np.zeros(X.shape[0], dtype=int)
while True:
old_clusters = clusters.copy()
distances = np.linalg.norm(X[:, None, :] - centroids[None, :, :], axis=-1)
clusters = np.argmin(distances, axis=1)
for i in range(K):
if np.sum(clusters == i) > 0:
centroids[i] = np.mean(X[clusters == i], axis=0)
if np.all(old_clusters == clusters):
break
return clusters
```
使用以上代码,可以使用以下方式调用:
```python
from sklearn.datasets import make_moons
from sklearn.metrics import accuracy_score
X, y = make_moons(n_samples=400, shuffle=True, noise=0.1, random_state=136)
preds = k_means_pp(X, 2, random_state=0)
accuracy = accuracy_score(y, preds)
print("K-Means++ Accuracy:", accuracy)
```
DBSCAN:
```python
from sklearn.cluster import DBSCAN
X, y = make_moons(n_samples=400, shuffle=True, noise=0.1, random_state=136)
dbscan = DBSCAN(eps=0.2, min_samples=10)
preds = dbscan.fit_predict(X)
accuracy = accuracy_score(y, preds)
print("DBSCAN Accuracy:", accuracy)
```
AGNES:
```python
from scipy.spatial.distance import pdist, squareform
from scipy.cluster.hierarchy import linkage, fcluster
X, y = make_moons(n_samples=400, shuffle=True, noise=0.1, random_state=136)
distances = pdist(X)
linkage_matrix = linkage(distances, method='complete')
preds = fcluster(linkage_matrix, 2, criterion='maxclust')
accuracy = accuracy_score(y, preds - 1)
print("AGNES Accuracy:", accuracy)
```
注意,以上三种算法的准确率都依赖于初始的随机种子,如果随机种子不同,准确率可能会有所差异。
阅读全文