Support Vector Machines (SVM) เป็นคลาสอัลกอริธึมการเรียนรู้ของเครื่องภายใต้การดูแลที่ทรงพลังและอเนกประสงค์ ซึ่งมีประสิทธิภาพโดยเฉพาะสำหรับงานจำแนกประเภท ไลบรารี เช่น scikit-learn ใน Python นำเสนอการใช้งาน SVM ที่มีประสิทธิภาพ ทำให้ผู้ปฏิบัติงานและนักวิจัยสามารถเข้าถึงได้ คำตอบนี้จะอธิบายว่า scikit-learn สามารถนำไปใช้ในการจำแนกประเภท SVM ได้อย่างไร โดยให้รายละเอียดเกี่ยวกับฟังก์ชันหลักที่เกี่ยวข้อง และให้ตัวอย่างประกอบ
ความรู้เบื้องต้นเกี่ยวกับ SVM
รองรับ Vector Machines ทำงานโดยการค้นหาไฮเปอร์เพลนที่แยกข้อมูลออกเป็นคลาสต่างๆ ได้ดีที่สุด ในอวกาศสองมิติ ไฮเปอร์เพลนนี้เป็นเพียงเส้นตรง แต่ในมิติที่สูงกว่า มันจะกลายเป็นระนาบหรือไฮเปอร์เพลน ไฮเปอร์เพลนที่ดีที่สุดคือไฮเปอร์เพลนที่เพิ่มระยะขอบระหว่างสองคลาสให้สูงสุด โดยที่ระยะขอบถูกกำหนดให้เป็นระยะห่างระหว่างไฮเปอร์เพลนและจุดข้อมูลที่ใกล้ที่สุดจากคลาสใดคลาสหนึ่ง ซึ่งเรียกว่าเวกเตอร์สนับสนุน
Scikit-learn และ SVM
Scikit-learn เป็นไลบรารี Python ที่ทรงพลังสำหรับการเรียนรู้ของเครื่องซึ่งมีเครื่องมือที่เรียบง่ายและมีประสิทธิภาพสำหรับการขุดข้อมูลและการวิเคราะห์ข้อมูล มันถูกสร้างขึ้นบน NumPy, SciPy และ matplotlib โมดูล `svm` ภายใน scikit-learn จัดให้มีการใช้งานอัลกอริธึม SVM
ฟังก์ชั่นที่สำคัญ
1. `svm.SVC`: นี่คือคลาสหลักสำหรับการดำเนินการจำแนกประเภทโดยใช้ SVM SVC ย่อมาจาก Support Vector Classification
2. `พอดี`: วิธีการนี้ใช้เพื่อฝึกโมเดลกับข้อมูลที่กำหนด
3. `ทำนาย`: เมื่อโมเดลได้รับการฝึกฝนแล้ว วิธีการนี้จะใช้ในการทำนายป้ายกำกับคลาสสำหรับข้อมูลการทดสอบที่กำหนด
4. `คะแนน`: วิธีการนี้ใช้ในการประเมินความถูกต้องของแบบจำลองกับข้อมูลการทดสอบ
5. `กริดเสิร์ชซีวี`: ใช้สำหรับการปรับแต่งไฮเปอร์พารามิเตอร์เพื่อค้นหาพารามิเตอร์ที่ดีที่สุดสำหรับโมเดล SVM
การใช้การจำแนกประเภท SVM ด้วย scikit-learn
มาพิจารณาขั้นตอนต่างๆ ที่เกี่ยวข้องกับการนำการจำแนกประเภท SVM ไปใช้โดยใช้ scikit-learn กัน
ขั้นตอนที่ 1: การนำเข้าไลบรารี
ขั้นแรก ให้นำเข้าไลบรารีที่จำเป็น:
python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import classification_report, confusion_matrix
ขั้นตอนที่ 2: กำลังโหลดชุดข้อมูล
เพื่อจุดประสงค์ในการสาธิต เราจะใช้ชุดข้อมูล Iris ซึ่งเป็นชุดข้อมูลที่รู้จักกันดีในชุมชนการเรียนรู้ของเครื่อง:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
ขั้นตอนที่ 3: การแยกชุดข้อมูล
แบ่งชุดข้อมูลออกเป็นชุดการฝึกอบรมและการทดสอบ:
python # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
ขั้นตอนที่ 4: การปรับขนาดคุณสมบัติ
การปรับขนาดฟีเจอร์เป็นสิ่งสำคัญสำหรับ SVM เนื่องจากมีความอ่อนไหวต่อขนาดของฟีเจอร์อินพุต:
python # Standardize features by removing the mean and scaling to unit variance scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
ขั้นตอนที่ 5: การฝึกอบรมโมเดล SVM
สร้างอินสแตนซ์ตัวแยกประเภท SVM และฝึกกับข้อมูลการฝึก:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
ที่นี่ เราใช้เคอร์เนลเชิงเส้นและตั้งค่าพารามิเตอร์การทำให้เป็นมาตรฐาน `C` เป็น 1.0 พารามิเตอร์เคอร์เนลระบุประเภทของไฮเปอร์เพลนที่ใช้ในการแยกข้อมูล เมล็ดพืชทั่วไป ได้แก่ 'linear', 'poly' (พหุนาม), 'rbf' (ฟังก์ชันพื้นฐานแนวรัศมี) และ 'sigmoid'
ขั้นตอนที่ 6: การทำนาย
ใช้แบบจำลองที่ได้รับการฝึกอบรมเพื่อคาดการณ์ข้อมูลการทดสอบ:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
ขั้นตอนที่ 7: การประเมินแบบจำลอง
ประเมินประสิทธิภาพของแบบจำลองโดยใช้ตัวชี้วัด เช่น เมทริกซ์ความสับสนและรายงานการจัดหมวดหมู่:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
เมทริกซ์ความสับสนจะให้ผลสรุปของการคาดการณ์ ในขณะที่รายงานการจำแนกประเภทประกอบด้วยความแม่นยำ การเรียกคืน คะแนน F1 และการสนับสนุนสำหรับแต่ละคลาส
การปรับแต่งไฮเปอร์พารามิเตอร์ด้วย GridSearchCV
การปรับแต่งไฮเปอร์พารามิเตอร์ถือเป็นสิ่งสำคัญสำหรับการเพิ่มประสิทธิภาพการทำงานของโมเดล SVM `GridSearchCV` ของ Scikit-learn สามารถใช้เพื่อค้นหาตารางพารามิเตอร์ที่ระบุอย่างละเอียดถี่ถ้วน:
python from sklearn.model_selection import GridSearchCV # Define the parameter grid param_grid = { 'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001], 'kernel': ['rbf'] } # Create a GridSearchCV instance grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2) grid.fit(X_train, y_train) # Print the best parameters and the corresponding score print("Best parameters found: ", grid.best_params_) print("Best score: ", grid.best_score_) # Use the best estimator to make predictions grid_predictions = grid.predict(X_test) # Evaluate the model with the best parameters print(confusion_matrix(y_test, grid_predictions)) print(classification_report(y_test, grid_predictions))
ในตัวอย่างนี้ เราค้นหาค่า "C" และ "gamma" ในตารางโดยใช้เคอร์เนล RBF อินสแตนซ์ `GridSearchCV` ปรับโมเดลใหม่ด้วยพารามิเตอร์ที่ดีที่สุดที่พบในระหว่างการค้นหา
การแสดงขอบเขตการตัดสินใจ
เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการทำงานของตัวแยกประเภท SVM มักจะมีประโยชน์ในการแสดงภาพขอบเขตการตัดสินใจ นี่เป็นสิ่งที่ตรงไปตรงมามากขึ้นในพื้นที่คุณลักษณะสองมิติ ด้านล่างนี้คือตัวอย่างการใช้ชุดข้อมูลสังเคราะห์:
python from sklearn.datasets import make_blobs # Generate a synthetic dataset X, y = make_blobs(n_samples=100, centers=2, random_state=6) # Fit the SVM model svc = SVC(kernel='linear', C=1.0) svc.fit(X, y) # Create a mesh to plot the decision boundary h = .02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) # Predict the class for each point in the mesh Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # Plot the decision boundary plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plt.show()
โค้ดด้านบนสร้างชุดข้อมูลสังเคราะห์ที่มี 2 คลาส เหมาะกับโมเดล SVM ที่มีเคอร์เนลเชิงเส้น และแสดงภาพขอบเขตการตัดสินใจ ฟังก์ชัน `contourf` ใช้ในการพล็อตขอบเขตการตัดสินใจ และพล็อตกระจายจะแสดงจุดข้อมูล Scikit-learn มอบอินเทอร์เฟซที่ครอบคลุมและใช้งานง่ายสำหรับการนำการจัดหมวดหมู่ SVM ไปใช้ใน Python ฟังก์ชันหลัก เช่น `svm.SVC`, `fit`, `predict` และ `score` เป็นสิ่งจำเป็นสำหรับการสร้างและประเมินโมเดล SVM การปรับไฮเปอร์พารามิเตอร์ด้วย `GridSearchCV` ช่วยเพิ่มประสิทธิภาพการทำงานของโมเดลเพิ่มเติมด้วยการค้นหาพารามิเตอร์ที่เหมาะสมที่สุด การแสดงภาพขอบเขตการตัดสินใจสามารถให้ข้อมูลเชิงลึกที่มีคุณค่าเกี่ยวกับพฤติกรรมของตัวแยกประเภท เมื่อทำตามขั้นตอนเหล่านี้ เราจะสามารถนำและเพิ่มประสิทธิภาพการจัดหมวดหมู่ SVM โดยใช้ scikit-learn ได้อย่างมีประสิทธิภาพ
คำถามและคำตอบล่าสุดอื่น ๆ เกี่ยวกับ EITC/AI/MLP Machine Learning ด้วย Python:
- พารามิเตอร์ b ในการถดถอยเชิงเส้น (ค่าตัดแกน y ของเส้นพอดีที่ดีที่สุด) คำนวณอย่างไร
- เวกเตอร์สนับสนุนมีบทบาทอย่างไรในการกำหนดขอบเขตการตัดสินใจของ SVM และจะระบุได้อย่างไรในระหว่างกระบวนการฝึกอบรม
- ในบริบทของการปรับให้เหมาะสม SVM อะไรคือความสำคัญของเวกเตอร์น้ำหนัก `w` และอคติ `b` และจะพิจารณาได้อย่างไร
- จุดประสงค์ของวิธี "แสดงภาพ" ในการใช้งาน SVM คืออะไร และช่วยในการทำความเข้าใจประสิทธิภาพของแบบจำลองได้อย่างไร
- วิธีการ 'คาดการณ์' ในการใช้งาน SVM กำหนดการจำแนกประเภทของจุดข้อมูลใหม่อย่างไร
- วัตถุประสงค์หลักของ Support Vector Machine (SVM) ในบริบทของการเรียนรู้ของเครื่องคืออะไร
- อธิบายความสำคัญของข้อจำกัด (y_i (mathbf{x__i cdot mathbf{w} + b) geq 1) ในการเพิ่มประสิทธิภาพ SVM
- วัตถุประสงค์ของปัญหาการปรับให้เหมาะสม SVM คืออะไร และมีการกำหนดสูตรทางคณิตศาสตร์อย่างไร
- การจำแนกประเภทของคุณลักษณะที่ตั้งค่าใน SVM ขึ้นอยู่กับเครื่องหมายของฟังก์ชันการตัดสินใจอย่างไร (ข้อความ {เครื่องหมาย} (mathbf {x__i cdot mathbf {w} + b))
- บทบาทของสมการไฮเปอร์เพลนคืออะไร (mathbf{x} cdot mathbf{w} + b = 0) ในบริบทของ Support Vector Machines (SVM)
ดูคำถามและคำตอบเพิ่มเติมใน EITC/AI/MLP Machine Learning with Python