მხარდაჭერის ვექტორული მანქანები (SVM) არის კონტროლირებადი მანქანათმცოდნეობის ალგორითმების ძლიერი და მრავალმხრივი კლასი, განსაკუთრებით ეფექტური კლასიფიკაციის ამოცანებისთვის. ბიბლიოთეკები, როგორიცაა პითონში scikit-learn, უზრუნველყოფს SVM-ის მყარ იმპლემენტაციას, რაც მას ხელმისაწვდომს ხდის როგორც პრაქტიკოსებისთვის, ასევე მკვლევრებისთვის. ეს პასუხი განმარტავს, თუ როგორ შეიძლება scikit-learn-ის გამოყენება SVM კლასიფიკაციის განსახორციელებლად, დეტალურად აღწერს ჩართულ ძირითად ფუნქციებს და უზრუნველყოფს საილუსტრაციო მაგალითებს.
SVM-ის შესავალი
მხარდაჭერის ვექტორული მანქანები მოქმედებენ ჰიპერპლანეტის პოვნაში, რომელიც საუკეთესოდ ჰყოფს მონაცემებს სხვადასხვა კლასებად. ორგანზომილებიან სივრცეში ეს ჰიპერთვითმფრინავი უბრალოდ ხაზია, მაგრამ უფრო მაღალ განზომილებებში ის ხდება სიბრტყე ან ჰიპერპლანი. ოპტიმალური ჰიპერპლანე არის ის, რომელიც მაქსიმალურად ზრდის ზღვარს ორ კლასს შორის, სადაც ზღვარი განისაზღვრება, როგორც მანძილი ჰიპერპლანსა და უახლოეს მონაცემთა წერტილებს შორის რომელიმე კლასიდან, რომელიც ცნობილია როგორც დამხმარე ვექტორები.
Scikit-learn და SVM
Scikit-learn არის პითონის მძლავრი ბიბლიოთეკა მანქანური სწავლისთვის, რომელიც უზრუნველყოფს მარტივ და ეფექტურ ინსტრუმენტებს მონაცემთა მოპოვებისა და მონაცემთა ანალიზისთვის. ის აგებულია NumPy-ზე, SciPy-ზე და matplotlib-ზე. `svm` მოდული scikit-learn-ში უზრუნველყოფს SVM ალგორითმების განხორციელებას.
ძირითადი ფუნქციები
1. `svm.SVC`: ეს არის ძირითადი კლასი SVM-ის გამოყენებით კლასიფიკაციის შესასრულებლად. SVC ნიშნავს მხარდაჭერის ვექტორის კლასიფიკაციას.
2. `შეესაბამება~: ეს მეთოდი გამოიყენება მოდელის მომზადებისთვის მოცემულ მონაცემებზე.
3. `პროგნოზირება~: მოდელის მომზადების შემდეგ, ეს მეთოდი გამოიყენება კლასების ეტიკეტების პროგნოზირებისთვის მოცემული ტესტის მონაცემებისთვის.
4. `ქულა~: ეს მეთოდი გამოიყენება ტესტის მონაცემებზე მოდელის სიზუსტის შესაფასებლად.
5. `GridSearchCV`: ეს გამოიყენება ჰიპერპარამეტრების რეგულირებისთვის, რათა იპოვოთ საუკეთესო პარამეტრები 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-ზე. ბირთვის პარამეტრი განსაზღვრავს ჰიპერპლანის ტიპს, რომელიც გამოიყენება მონაცემების გასაყოფად. საერთო ბირთვები მოიცავს "ხაზოვან", "პოლი" (პოლინომიური), "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-ქულს და მხარდაჭერას თითოეული კლასისთვის.
Hyperparameter Tuning with 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))
ამ მაგალითში, ჩვენ მოვძებნეთ მნიშვნელობების ბადე „C“ და „გამა“ 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()
ზემოაღნიშნული კოდი ქმნის სინთეზურ მონაცემთა ბაზას ორი კლასით, შეესაბამება SVM მოდელს ხაზოვანი ბირთვით და ასახავს გადაწყვეტილების საზღვრებს. `contourf` ფუნქცია გამოიყენება გადაწყვეტილების საზღვრის გამოსათვლელად, ხოლო სკატერის დიაგრამა აჩვენებს მონაცემთა წერტილებს. Scikit-learn უზრუნველყოფს ყოვლისმომცველ და მოსახერხებელი ინტერფეისს SVM კლასიფიკაციის განსახორციელებლად Python-ში. ძირითადი ფუნქციები, როგორიცაა `svm.SVC`, `fit`, `predict` და `score` აუცილებელია SVM მოდელების შესაქმნელად და შეფასებისთვის. ჰიპერპარამეტრების რეგულირება `GridSearchCV`-ით კიდევ უფრო აძლიერებს მოდელის მუშაობას ოპტიმალური პარამეტრების პოვნის გზით. გადაწყვეტილების საზღვრის ვიზუალიზაციამ შეიძლება მოგაწოდოთ ღირებული ინფორმაცია კლასიფიკატორის ქცევაზე. ამ ნაბიჯების დაცვით, შეგიძლიათ ეფექტურად დანერგოთ და გააუმჯობესოთ SVM კლასიფიკაცია scikit-learn-ის გამოყენებით.
სხვა ბოლოდროინდელი კითხვები და პასუხები EITC/AI/MLP მანქანური სწავლება Python- ით:
- როგორ გამოითვლება b პარამეტრი წრფივ რეგრესიაში (საუკეთესო მორგებული ხაზის y-კვეთა)?
- რა როლს ასრულებენ მხარდაჭერის ვექტორები SVM-ის გადაწყვეტილების საზღვრის განსაზღვრაში და როგორ ხდება მათი იდენტიფიცირება ტრენინგის პროცესში?
- SVM ოპტიმიზაციის კონტექსტში რა მნიშვნელობა აქვს წონის ვექტორს `w` და მიკერძოებას `b` და როგორ განისაზღვრება ისინი?
- რა არის "ვიზუალიზაციის" მეთოდის მიზანი SVM დანერგვაში და როგორ ეხმარება ის მოდელის მუშაობის გაგებაში?
- როგორ განსაზღვრავს "პროგნოზის" მეთოდი SVM დანერგვაში ახალი მონაცემთა წერტილის კლასიფიკაციას?
- რა არის მხარდაჭერის ვექტორული მანქანის (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) დამხმარე ვექტორული მანქანების (SVM) კონტექსტში?
იხილეთ მეტი კითხვა და პასუხი EITC/AI/MLP Machine Learning-ში Python-ით