Дэмжлэгийн вектор машинууд (SVM) нь хяналттай машин сургалтын алгоритмуудын хүчирхэг бөгөөд олон талт ангилал бөгөөд ангиллын ажилд онцгой үр дүнтэй байдаг. Python хэл дээрх scikit-learn зэрэг номын сангууд SVM-ийн бат бөх хэрэгжилтийг хангадаг бөгөөд үүнийг дадлагажигч, судлаачдад ашиглах боломжтой болгодог. Энэхүү хариулт нь SVM ангиллыг хэрэгжүүлэхийн тулд scikit-learn-ийг хэрхэн ашиглаж болохыг тайлбарлаж, холбогдох үндсэн функцуудыг нарийвчлан тайлбарлаж, жишээнүүдийг үзүүлнэ.
SVM-ийн танилцуулга
Дэмжлэгийн вектор машинууд нь өгөгдлийг өөр өөр ангилалд хамгийн сайн тусгаарлах гиперпланг олох замаар ажилладаг. Хоёр хэмжээст орон зайд энэ гиперплан нь зүгээр л шугам боловч илүү өндөр хэмжээст бол энэ нь хавтгай эсвэл гипер хавтгай болдог. Оновчтой гипер хавтгай нь хоёр ангиллын хоорондох зайг хамгийн их байлгах нэг бөгөөд үүнд ахиу нь гипер хавтгай ба аль ч ангийн хамгийн ойрын өгөгдлийн цэгүүдийн хоорондох зайгаар тодорхойлогддог бөгөөд үүнийг дэмжих вектор гэж нэрлэдэг.
Scikit-learn болон SVM
Scikit-learn нь өгөгдөл олборлох, дүн шинжилгээ хийх энгийн бөгөөд үр ашигтай хэрэгслээр хангадаг машин сургалтын хүчирхэг Python номын сан юм. Энэ нь NumPy, SciPy, matplotlib дээр бүтээгдсэн. Scikit-learn доторх `svm` модуль нь SVM алгоритмуудыг хэрэгжүүлэх боломжийг олгодог.
Гол функцүүд
1. `svm.SVC`: Энэ нь SVM ашиглан ангилал хийх үндсэн анги юм. SVC нь Support Vector Classification гэсэн үгийн товчлол юм.
2. `тохирох`: Энэ аргыг өгөгдсөн өгөгдөл дээр загварыг сургахад ашигладаг.
3. "урьдчилан таамаглах": Загварыг сургасны дараа энэ аргыг өгөгдсөн тестийн өгөгдлийн ангийн шошгыг таамаглахад ашигладаг.
4. `оноо`: Энэ аргыг туршилтын өгөгдөл дээрх загварын нарийвчлалыг үнэлэхэд ашигладаг.
5. `GridSearchCV`: Энэ нь SVM загварын хамгийн сайн параметрүүдийг олохын тулд гиперпараметр тааруулахад ашиглагддаг.
scikit-learn ашиглан SVM ангиллыг хэрэгжүүлж байна
Scikit-learn ашиглан SVM ангиллыг хэрэгжүүлэхэд хамаарах алхмуудыг авч үзье.
Алхам 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 болгож тохируулсан. Цөмийн параметр нь өгөгдлийг салгахад ашигладаг гипер хавтгайн төрлийг тодорхойлдог. Нийтлэг цөмд 'шугаман', 'поли' (олон гишүүнт), 'rbf' (радиал суурь функц), 'сигмоид' орно.
Алхам 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 загварын гүйцэтгэлийг оновчтой болгоход зайлшгүй шаардлагатай. Scikit-learn-ийн `GridSearchCV`-г заасан параметрийн сүлжээн дээр бүрэн хайлт хийхэд ашиглаж болно:
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))
Энэ жишээн дээр бид RBF цөм ашиглан `C` болон `гамма` утгуудын сүлжээнээс хайсан. `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()
Дээрх код нь хоёр ангитай синтетик өгөгдлийн багц үүсгэж, шугаман цөмтэй SVM загварт таарч, шийдвэрийн хил хязгаарыг дүрслэн харуулдаг. `Contourf` функцийг шийдвэрийн хил хязгаарыг зурахад ашигладаг бөгөөд тараах график нь өгөгдлийн цэгүүдийг харуулдаг. Scikit-learn нь Python дээр SVM ангиллыг хэрэгжүүлэх цогц бөгөөд хэрэглэгчдэд ээлтэй интерфейсээр хангадаг. `svm.SVC`, `fit`, `predict`, `score` зэрэг гол функцууд нь SVM загварыг бүтээх, үнэлэхэд зайлшгүй шаардлагатай. `GridSearchCV`-тэй гиперпараметрийг тааруулах нь оновчтой параметрүүдийг олох замаар загварын гүйцэтгэлийг улам сайжруулдаг. Шийдвэрийн хил хязгаарыг төсөөлөх нь ангилагчийн зан үйлийн талаар үнэ цэнэтэй ойлголтыг өгөх болно. Эдгээр алхмуудыг дагаж мөрдвөл scikit-learn ашиглан SVM ангиллыг үр дүнтэй хэрэгжүүлж, оновчтой болгох боломжтой.
Сүүлийн үеийн бусад асуулт, хариулт Python ашиглан EITC/AI/MLP Machine Learning:
- Шугаман регрессийн b параметрийг (хамгийн сайн тохирох шугамын y огтлолцол) хэрхэн тооцдог вэ?
- SVM-ийн шийдвэрийн хил хязгаарыг тодорхойлоход туслах векторууд ямар үүрэг гүйцэтгэдэг вэ, сургалтын явцад тэдгээрийг хэрхэн тодорхойлдог вэ?
- SVM оновчлолын хүрээнд `w` ба хазайлт `b` жингийн векторын ач холбогдол юу вэ, тэдгээрийг хэрхэн тодорхойлдог вэ?
- SVM-ийн хэрэгжилтэд "визуал" аргын зорилго юу вэ, энэ нь загварын гүйцэтгэлийг ойлгоход хэрхэн тусалдаг вэ?
- SVM-ийн хэрэгжилтийн 'урьдчилан таамаглах' арга нь шинэ өгөгдлийн цэгийн ангиллыг хэрхэн тодорхойлдог вэ?
- Машин сургалтын хүрээнд дэмжих вектор машин (SVM)-ийн үндсэн зорилго юу вэ?
- SVM оновчлол дахь хязгаарлалтын (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) ач холбогдлыг тайлбарла.
- SVM оновчлолын асуудлын зорилго юу вэ, түүнийг математикийн хувьд хэрхэн томъёолсон бэ?
- SVM дээрх функцийн багцын ангилал нь шийдвэрийн функцийн тэмдгээс хэрхэн хамаардаг вэ (текст{sign}(mathbf{x}_i cdot mathbf{w} + b))?
- Дэмжих вектор машинуудын (SVM) контекст дэх гипер хавтгай тэгшитгэл (mathbf{x} cdot mathbf{w} + b = 0) ямар үүрэг гүйцэтгэдэг вэ?
Python ашиглан EITC/AI/MLP Machine Learning-д илүү олон асуулт, хариултыг харна уу