K-nghĩa là: một số cách tốt để chọn một tập hợp ban đầu hiệu quả là gì?


17

Khi một khởi tạo ngẫu nhiên của centroid được sử dụng, các lần chạy K-mean khác nhau sẽ tạo ra tổng SSE khác nhau. Và nó rất quan trọng trong việc thực hiện thuật toán. Một số phương pháp hiệu quả để giải quyết vấn đề này là gì? Cách tiếp cận gần đây được đánh giá cao.

Câu trả lời:


12

Một cách tiếp cận mang lại kết quả phù hợp hơn là K-nghĩa là ++ . Cách tiếp cận này thừa nhận rằng có lẽ có một sự lựa chọn tốt hơn về các vị trí trung tâm ban đầu hơn là chỉ định ngẫu nhiên đơn giản. Cụ thể, phương tiện K có xu hướng hoạt động tốt hơn khi các nhân giáp được gieo hạt theo cách không kết hợp chúng lại với nhau trong không gian.

Nói tóm lại, phương pháp như sau:

  1. Chọn một trong những điểm dữ liệu của bạn một cách ngẫu nhiên làm trọng tâm ban đầu.
  2. Tính , khoảng cách giữa trọng tâm ban đầu của bạn và tất cả các điểm dữ liệu khác, .xD(x)x
  3. Chọn trọng tâm tiếp theo của bạn từ các điểm dữ liệu còn lại với xác suất tỷ lệ thuận vớiD(x)2
  4. Lặp lại cho đến khi tất cả các centroid đã được chỉ định.

Lưu ý: nên được cập nhật khi thêm nhiều centroid. Nó nên được đặt là khoảng cách giữa một điểm dữ liệu và trọng tâm gần nhất.D(x)

Bạn cũng có thể quan tâm để đọc bài viết này đề xuất phương pháp và mô tả hiệu suất dự kiến ​​tổng thể của nó.


5

Tôi có thể đang hiểu nhầm câu hỏi của bạn, nhưng thông thường k-nghĩa là chọn ngẫu nhiên trọng tâm của bạn cho bạn tùy thuộc vào số lượng cụm bạn đặt (ví dụ: k). Chọn số cho k có xu hướng là một bài tập chủ quan. Một nơi tốt để bắt đầu là một âm mưu Elbow / Scree có thể được tìm thấy ở đây:

http://en.wikipedia.org/wiki/Determining_the_number_of_clustftimein_a_data_set#The_Elbow_Method


Tôi nghĩ rằng câu hỏi là về khởi tạo centroid, đó là {'k-nghĩa là ++', 'ngẫu nhiên' hoặc một ndarray} trên trang tài liệu scikit-learn.org/ sóng / mô
Itachi

4

Cách tiếp cận thông thường cho vấn đề này là chạy lại thuật toán K-mean của bạn nhiều lần, với các khởi tạo ngẫu nhiên khác nhau của centroid và để giữ giải pháp tốt nhất. Bạn có thể làm điều đó bằng cách đánh giá kết quả trên dữ liệu đào tạo của bạn hoặc bằng phương thức xác nhận chéo.

Có nhiều cách khác để khởi tạo centroid, nhưng không có cách nào trong số chúng sẽ thực hiện tốt nhất cho mọi vấn đề. Bạn có thể đánh giá các phương pháp này cùng với khởi tạo ngẫu nhiên cho vấn đề cụ thể của bạn.


0

Tôi đồng ý với âm mưu Elbow / Scree. Tôi thấy nó hợp lý hơn bằng một hạt giống ngẫu nhiên. Đây là một mã ví dụ để thử nó.

Ks=30
mean_acc=np.zeros((Ks-1))
std_acc=np.zeros((Ks-1))
ConfustionMx=[];
for n in range(1,Ks):    
    #Train Model and Predict  
    kNN_model = KNeighborsClassifier(n_neighbors=n).fit(X_train,y_train)
    yhat = kNN_model.predict(X_test)
    mean_acc[n-1]=np.mean(yhat==y_test);
    std_acc[n-1]=np.std(yhat==y_test)/np.sqrt(yhat.shape[0])

plt.plot(range(1,Ks),mean_acc,'g')
plt.fill_between(range(1,Ks),mean_acc - 1 * std_acc,mean_acc + 1 * std_acc, alpha=0.10)
plt.legend(('Accuracy ', '+/- 3xstd'))
plt.ylabel('Accuracy ')
plt.xlabel('Number of Nabors (K)')
plt.tight_layout()
plt.show()

print( "The best accuracy was with", mean_acc.max(), "with k=", mean_acc.argmax()+1)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.