Phân loại khí dùng cảm biến khí kết hợp ML

classification

#1

Chào anh Tiệp và mọi người. Mìnhcũng mới là tín đồ của ML. Hiện tại mình đang thử phân loại

khí dùng cảm biến khí kết hợp với các thuật toán ML trên python nhưng không biết thực hiện

thế nào và từ đâu. Mong mọi người giúp đỡ. Mình đính kèm tệp dữ liệu và kết quả phân tích

thử trên phần mềm Past 3 dùng PCA. Nhưng dường như kết quả không tốt lắm nên mình muốn

dùng thuật toán khác (SVM) trên python. Mình đang cần phân loại 2 khí (H2 và NH3) dùng 4 cảm

biến khí khác nhau).

Đây là dữ liệu của mình:

image

Và đây là kết quả mình thử dùng Past 3 với PCA:


#2

Nhìn qua data có vẻ ko khó lắm. SVM có lẽ chạy tốt, em dùng svm của Scikit-learn trên Python chạy thử đi, nếu không tốt thì dùng phương pháp khac, ví dụ gradient boosting


#3

Cảm ơn ý kiến của anh Van. Anh Van có code mẫu nào dùng python chay svm của thư viện Scikit-learn không ạ, nếu có anh hoặc mọi người có thể share em không? vì thật sự em mới bắt đầu đang tìm hiểu python thôi ạ.

Có 1 vấn đề muốn xin ý kiến anh và mọi người: Kết quả phân tích có vẻ tốt nếu dùng PCA (vì 2 khí nằm ở 2 vùng phân biệt). Tuy nhiên khi em muốn ước lượng mức độ tin cậy dùng ellipse thì 2 vùng (cho 2 khí trên) bị chồng lấn vào nhau. Để giải quyết vấn đề này thì dùng thuật toán phân loại khác có được không ạ? Dường như dữ liệu của em phân tán quá rộng nên khi vẽ hình ellip nó mới vậy.

P/s: Các kết quả phân tích trên em vẫn đang dùng past 3. Em đang muốn chuyển hết sang dùng python để chủ động code mà chưa làm được.


#4

Ví dụ của bạn có ít dữ liệu quá, nhưng có vẻ SVM vẫn hiệu quả. Nếu dữ liệu chỉ có phân bố như trên thôi thì dùng svm tuyến tính là được rồi, căng lắm thì dùng svm softmargin. Nhưng nếu dữ liệu không tuyến tính như trên thì dùng svm kernel là ok. Cứ phải thử mới biết được


#5

cảm ơn ý kiến của bạn, Mình biết là hiện tại bộ dữ liệu của mình hiện tại đang hạn chế, mình đang cố gắng khắc phục điều này. “anh2uantran” có thể chỉ cho mình phải thực hiện thế nào để triển khai svm trên python không? như mình đã nói ở phần trước vì mình mới tập tọe dùng python mà.


#6

Bạn thử nha. Mình code trên điện thoại nên chưa thử

from sklearn import svm 
#Them du lieu cua ban vao day. 0 la H2, 1 la NH3
# điền vào dấu ... dữ liệu của bạn theo theo hàng trừ cột cuối để làm validation
X = [[5, 5.6,2.9,3.5], [6.5, 9.1, 3.6,4],...] 
y = [0, 0,...] 
#train
clf = svm.SVC() 
clf.fit(X, y)
# SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
#predict
clf.predict([[7.5, 16.2, 77, 21.3]])

Gợi ý cải tiến: code trên để bạn hiểu cách thêm dữ liệu và họi hàm. Giờ nếu dữ liệu nhiều ( ví dụ 100 cột) bạn có thể import vào Xy dung panda hoặc gói thư viện đọc excel file

Tích dấu v và like nếu câu trả lời giúp bạn :slight_smile:


#7

Mình thử chạy code của bạn hướng dẫn trên jupiter nhưng nó báo lỗi như hình trên. Giúp mình nhá


#8

Sau cái fit() là dấu # để comment đó bạn. Bạn check kĩ lại code nha. Hoặc ko bạn xóa cái dòng “SVC(C=1.0, cache_size=200…” đi


#9

Bạn cho mình hỏi là làm thế nào để xác định các tham số của hàm “rbf” như bạn đưa cho mình là C=0.1; cof0=0.0; degree=3. Mình có xem qua một số cách làm là turning svm.


#10

Đã là tuning thì bạn phải chọn dựa vào dataset. Cái này ko có sách nào nói cả vì đó là quá trình tuning. Bạn đọc document của thuật toán đó để biết nó ảnh hưởng đến kq thế nào để quyết định tăng hay giảm…


Machine Learning ứng dụng dự đoán tuổi thọ của ắc quy
#11

Cái libSVM có hướng dẫn cách tuning và chọn biến cho SVM nè.


#12

cảm ơn bạn Toan và ban Thuong, mình chạy được chương trình theo hướng dẫn của ban Toan rồi, tuy nhiên kết quả đầu ra của bài toán phân tích mới chỉ có y_test thôi. Hiện mình đang đọc và cố gắng áp dụng auto turning svm với kernel strick cho bài toán này. Khi nào hoàn thiện mình sẽ up lên để share cho anh em. Trong thời gian đó mình vẫn luôn mong nhận được ý kiến góp ý của các “cao nhân” về cách xây dựng bài toán phân loại khí này của mình theo các mục:

  • Load file dữ liệu
  • pre-processing
  • svm dùng “kernel strick” với các tham số được xác địnhdùng phương pháp turning (auto gird search), mình muốn dùng cross-validation để xác định tham số mô hình từ tập traning.
  • Kết quả đầu ra sẽ bao gồm accuracy cho việc phân loại và đồ thị phân loại như hình này chẳng hạn: svm%20results

(ví dụ mình đang xem ở link: http://scikit-learn.org/stable/modules/svm.html)