Tingkatkan akurasi untuk SVM dengan kernel linier

Saya menggunakan Support Vector Machines (SVM) dengan kernel 'linier' untuk multiklasifikasi. Namun akurasinya sangat rendah. Apakah mungkin untuk meningkatkan akurasi?

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,classification_report,confusion_matrix
from sklearn.svm import SVC

#Prepare data for SVM
Diabetes_SVM = Diabetes2[['metformin','repaglinide','nateglinide','chlorpropamide','glimepiride','acetohexamide', 'glipizide', 'glyburide','troglitazone', 'tolazamide', 'examide','citoglipton', 'insulin']]

#Create dummy variables
nominal = ['metformin','repaglinide','nateglinide','chlorpropamide','glimepiride','acetohexamide', 'glipizide', 'glyburide', 
           'tolbutamide', 'pioglitazone', 'rosiglitazone', 'acarbose', 'miglitol', 'troglitazone', 'tolazamide', 'examide',
           'citoglipton']
Diabetes_SVM = pd.get_dummies(Diabetes_SVM,columns=nominal)

#Map data for SVM
Diabetes_SVM['insulin']=Diabetes_SVM['insulin'].map({'Down': 1,'No': 2,
                                                     'Steady': 3,'Up': 4})

#Defining features and target variable for SVM
X_SVM = Diabetes_SVM.drop('insulin', axis=1).values
y_SVM = Diabetes_SVM['insulin'].values

#Split dataset into training set and test set for SVM
X_train, X_test, y_train, y_test = train_test_split(X_SVM, y_SVM, test_size=0.30, random_state=42)

#Fit SVC Class
svclassifier = SVC(kernel='linear')
svclassifier.fit(X_train, y_train)

#Making Predictions
y_pred = svclassifier.predict(X_test)
print(confusion_matrix(y_test,y_pred))
print(classification_report(y_test,y_pred))

Saya sudah mencoba SVM dengan pengklasifikasi linier dengan akurasi hanya 0,47. Bagaimana cara menyesuaikan akurasi?


person Nith    schedule 21.01.2021    source sumber
comment
seberapa besar set pelatihannya? apakah itu tidak seimbang?   -  person Epimetheus    schedule 21.01.2021
comment
svclassifier = SVC(kernel='linier') . Anda menggunakan kernel linier.   -  person Epimetheus    schedule 21.01.2021
comment
set pelatihan sekitar 68637 catatan. Saya mencoba memeriksanya.   -  person Nith    schedule 21.01.2021


Jawaban (1)


coba SVC(kernel='poly') dan normalkan data Anda. Bandingkan hasil Anda dengan pengklasifikasi LogisticRegression(). Gunakan pengklasifikasi terbaik untuk data Anda. Uji data Anda untuk melihat apakah data tersebut non-linier. Gunakan pytorch atau keras atau GLM jika datanya nonlinier.

 from sklearn.preprocessing import StandardScaler

 X=df[NUMERIC]
 y=df['Target']

 X_train,X_test,y_train, y_test=train_test_split(X,y,test_size=0.1,random_state=42)

 scaler = MinMaxScaler()
 X_train[X_train.columns] = scaler.fit_transform(X_train[X_train.columns])
 X_test[X_test.columns] = scaler.transform(X_test[X_test.columns])

 model=SVC(kernel='poly', degree=3,C=1E10)
 model.fit(X_train,y_train)
 y_pred=model.predict(X_test)
 print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
person Golden Lion    schedule 09.03.2021
comment
lihat peningkatan akurasi untuk mesin vektor dukungan saya (stackoverflow.com/questions/39001936/) penulis menyarankan menggunakan BaggingClassifier dan pendekatan ansambel untuk meningkatkan akurasi - person Golden Lion; 09.03.2021
comment
lakukan pengujian anomali dan cari outlier dalam data Anda. apakah Anda k-means cluster untuk melihat pengelompokan apa yang ada di data Anda. Biasanya ketika skor Anda rendah, datanya buruk. - person Golden Lion; 09.03.2021
comment
Tingkatkan C ke angka besar untuk konvergensi - person Golden Lion; 10.03.2021
comment
Lihatlah mengganti svm dengan pytorch. Saya bisa menunjukkan caranya - person Golden Lion; 10.03.2021