Support Vector Machines (SVM) သည် အမျိုးအစားခွဲခြင်းလုပ်ငန်းများအတွက် အထူးထိရောက်သော ကြီးကြပ်ထားသော စက်သင်ယူမှု အယ်လဂိုရီသမ်များ၏ အစွမ်းထက်ပြီး စွယ်စုံရအတန်းဖြစ်သည်။ Python ရှိ scikit-learn ကဲ့သို့သော စာကြည့်တိုက်များသည် SVM ၏ ခိုင်မာသော အကောင်အထည်ဖော်မှုများကို ပံ့ပိုးပေးသောကြောင့် လေ့ကျင့်သူများနှင့် သုတေသီများအတွက် အတူတူပင်ဖြစ်ပါသည်။ ဤတုံ့ပြန်မှုသည် SVM အမျိုးအစားခွဲခြားမှုကို အကောင်အထည်ဖော်ရန် scikit-learn မည်ကဲ့သို့ အသုံးချနိုင်သည်ကို ရှင်းရှင်းလင်းလင်းဖော်ပြမည်ဖြစ်ပြီး ပါဝင်သည့် အဓိကလုပ်ဆောင်ချက်များကို အသေးစိတ်ဖော်ပြကာ သရုပ်ဖော်ပုံဥပမာများကို ပံ့ပိုးပေးမည်ဖြစ်သည်။
SVM မိတ်ဆက်
ပံ့ပိုးမှု Vector Machines များသည် အချက်အလက်များကို မတူညီသော အတန်းများအဖြစ် အကောင်းဆုံးခွဲခြားနိုင်သော ဟိုက်ပါလေယာဉ်ကို ရှာဖွေခြင်းဖြင့် လုပ်ဆောင်သည်။ နှစ်ဘက်မြင် အာကာသအတွင်း၊ ဤ ဟိုက်ပါယာဉ်ပျံသည် မျဉ်းကြောင်းတစ်ခုဖြစ်သော်လည်း ပိုမိုမြင့်မားသောအတိုင်းအတာဖြင့်၊ ၎င်းသည် လေယာဉ် သို့မဟုတ် ဟိုက်ပါလေယာဉ်ဖြစ်လာသည်။ အကောင်းဆုံး ဟိုက်ပါလေယာဉ်သည် အတန်းနှစ်ခုကြားရှိ အနားသတ်ကို ချဲ့ထွင်ပေးသည့်အရာဖြစ်ပြီး၊ တစ်ဖက်မှ ဟိုက်ပါလေယာဉ်ပျံနှင့် အနီးဆုံးဒေတာအချက်များကြား အကွာအဝေးအဖြစ် သတ်မှတ်ထားသော အနားသတ်သည် အတန်းအစားနှစ်ခုကြားရှိ အနားသတ်များကို ချဲ့ထွင်ပေးသည်။
Scikit-learn နှင့် SVM
Scikit-learn သည် ဒေတာတူးဖော်ခြင်းနှင့် ဒေတာခွဲခြမ်းစိတ်ဖြာခြင်းအတွက် ရိုးရှင်းပြီး ထိရောက်သောကိရိယာများကို ပံ့ပိုးပေးသည့် စက်သင်ယူမှုအတွက် အစွမ်းထက်သော Python စာကြည့်တိုက်တစ်ခုဖြစ်သည်။ ၎င်းကို NumPy၊ SciPy နှင့် matplotlib တွင်တည်ဆောက်ထားသည်။ scikit-learn အတွင်းရှိ `svm` မော်ဂျူးသည် SVM အယ်ဂိုရီသမ်များ အကောင်အထည်ဖော်မှုကို ပံ့ပိုးပေးသည်။
Key ကို Functions များ
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- Dataset ကို Loading လုပ်ပါ။
သရုပ်ပြရည်ရွယ်ချက်အတွက်၊ စက်သင်ယူမှုအသိုင်းအဝိုင်းရှိ လူသိများသော ဒေတာအတွဲဖြစ်သော Iris dataset ကို အသုံးပြုပါမည်-
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
အဆင့် 3- Dataset ကို ပိုင်းခြားပါ။
ဒေတာအစုံကို လေ့ကျင့်ရေးနှင့် စမ်းသပ်မှုအစုများအဖြစ် ခွဲပါ-
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 Model ကို လေ့ကျင့်ပါ။
SVM အမျိုးအစားခွဲခြားမှုကို ချက်ချင်းလုပ်ဆောင်ပြီး လေ့ကျင့်ရေးဒေတာတွင် ၎င်းကို လေ့ကျင့်ပါ။
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
ဤတွင်၊ ကျွန်ုပ်တို့သည် linear kernel ကိုအသုံးပြုပြီး ပုံမှန်သတ်မှတ်ခြင်းဘောင် `C` ကို 1.0 သို့ သတ်မှတ်သည်။ kernel ကန့်သတ်ဘောင်သည် ဒေတာကို ပိုင်းခြားရန် အသုံးပြုသည့် ဟိုက်ပါလေယာဉ်အမျိုးအစားကို သတ်မှတ်သည်။ အသုံးများသော kernel များတွင် 'linear'၊ 'poly' (polynomial), 'rbf' (radial အခြေခံလုပ်ဆောင်ချက်) နှင့် '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))
ရှုပ်ထွေးသော matrix သည် ခန့်မှန်းရလဒ်များ၏ အကျဉ်းချုပ်ကို ပေးဆောင်ပြီး အမျိုးအစားခွဲခြင်းအစီရင်ခံစာတွင် တိကျမှု၊ ပြန်လည်ခေါ်ယူမှု၊ F1-ရမှတ်နှင့် အတန်းတစ်ခုစီအတွက် ပံ့ပိုးမှုတို့ ပါဝင်ပါသည်။
GridSearchCV ဖြင့် Hyperparameter ချိန်ညှိခြင်း။
Hyperparameter ချိန်ညှိခြင်းသည် 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 kernel ကို အသုံးပြု၍ `C` နှင့် `gamma` အတွက် တန်ဖိုးများကို ဂရစ်တစ်ကွက်ကျော် ရှာဖွေခဲ့သည်။ `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 မော်ဒယ်တစ်ခုနှင့် ကိုက်ညီသော linear kernel နှင့် ဆုံးဖြတ်ချက်ဘောင်ကို မြင်ယောင်စေသည်။ `contourf` လုပ်ဆောင်ချက်ကို ဆုံးဖြတ်ချက်နယ်နိမိတ်ကို ပုံဖော်ရန် အသုံးပြုထားပြီး ဖြန့်ခွဲကွက်သည် ဒေတာအချက်များကို ပြသသည်။ Scikit-learn သည် Python တွင် SVM အမျိုးအစားခွဲခြားခြင်းကို အကောင်အထည်ဖော်ရန်အတွက် ကျယ်ကျယ်ပြန့်ပြန့်နှင့် အသုံးပြုရလွယ်ကူသော အင်တာဖေ့စ်ကို ပံ့ပိုးပေးပါသည်။ `svm.SVC`၊ `fit`၊ `predict` နှင့် `score` ကဲ့သို့သော အဓိကလုပ်ဆောင်ချက်များသည် SVM မော်ဒယ်များကို တည်ဆောက်ခြင်းနှင့် အကဲဖြတ်ခြင်းအတွက် မရှိမဖြစ်လိုအပ်ပါသည်။ `GridSearchCV` ဖြင့် ဟိုက်ပါပါရာမီတာ ချိန်ညှိခြင်းသည် အကောင်းဆုံး ကန့်သတ်ဘောင်များကို ရှာဖွေခြင်းဖြင့် မော်ဒယ်စွမ်းဆောင်ရည်ကို ပိုမိုတိုးတက်စေသည်။ ဆုံးဖြတ်ချက်နယ်နိမိတ်ကို မြင်ယောင်ခြင်းက အမျိုးအစားခွဲခြားသူ၏ အပြုအမူအတွက် အဖိုးတန်သော ထိုးထွင်းသိမြင်မှုကို ပေးနိုင်ပါသည်။ ဤအဆင့်များကို လိုက်နာခြင်းဖြင့်၊ တစ်ဦးသည် scikit-learn ကို အသုံးပြု၍ SVM အမျိုးအစားခွဲခြားမှုကို ထိထိရောက်ရောက် အကောင်အထည်ဖော်နိုင်ပြီး အကောင်းဆုံးဖြစ်အောင် လုပ်ဆောင်နိုင်သည်။
အခြား လတ်တလောမေးခွန်းများနှင့် အဖြေများ Python ကို အသုံးပြု၍ EITC/AI/MLP Machine Learning:
- linear regression (အကောင်းဆုံး fit line ၏ y-ကြားဖြတ်) တွင် b parameter ကို မည်သို့တွက်ချက်သနည်း။
- SVM တစ်ခု၏ ဆုံးဖြတ်ချက်နယ်နိမိတ်ကို သတ်မှတ်ရာတွင် အထောက်အကူပြု vector များသည် မည်သည့်အခန်းကဏ္ဍမှ ပါဝင်သနည်း၊ လေ့ကျင့်ရေးလုပ်ငန်းစဉ်အတွင်း ၎င်းတို့ကို မည်သို့ဖော်ထုတ်သနည်း။
- SVM ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်း၏အခြေအနေတွင်၊ အလေးချိန် vector `w` နှင့် bias `b` တို့၏အရေးပါမှုကား အဘယ်နည်း၊ ၎င်းတို့ကို မည်သို့ဆုံးဖြတ်သနည်း။
- SVM အကောင်အထည်ဖော်မှုတွင် `visualize` နည်းလမ်း၏ ရည်ရွယ်ချက်မှာ အဘယ်နည်း၊ ၎င်းသည် မော်ဒယ်၏ စွမ်းဆောင်ရည်ကို နားလည်ရန် မည်သို့ကူညီပေးသနည်း။
- SVM အကောင်အထည်ဖော်မှုတစ်ခုရှိ 'ကြိုတင်ခန့်မှန်းချက်' နည်းလမ်းသည် ဒေတာအချက်အသစ်တစ်ခု၏ အမျိုးအစားခွဲခြင်းကို မည်သို့ဆုံးဖြတ်သနည်း။
- စက်သင်ယူမှုအခြေအနေတွင် Support Vector Machine (SVM) ၏ အဓိကရည်ရွယ်ချက်မှာ အဘယ်နည်း။
- SVM ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းတွင် ကန့်သတ်ချက်၏အဓိပ္ပာယ် (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) ကို ရှင်းပြပါ။
- SVM ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းပြဿနာ၏ ရည်ရွယ်ချက်မှာ အဘယ်နည်း၊ ၎င်းကို သင်္ချာနည်းဖြင့် မည်သို့ပုံဖော်သနည်း။
- SVM တွင် သတ်မှတ်ထားသော အင်္ဂါရပ်တစ်ခု၏ အမျိုးအစားခွဲခြားမှုသည် ဆုံးဖြတ်ချက်လုပ်ဆောင်ချက်၏ နိမိတ်ပေါ်တွင် မည်သို့မူတည်သနည်း (စာသား{sign}(mathbf{x}_i cdot mathbf{w} + b))။
- Support Vector Machines (SVM) ၏ context ရှိ hyperplane equation (mathbf{x} cdot mathbf{w} + b = 0) ၏ အခန်းကဏ္ဍကား အဘယ်နည်း။
Python ဖြင့် EITC/AI/MLP Machine Learning တွင် နောက်ထပ်မေးခွန်းများနှင့် အဖြေများကို ကြည့်ပါ။