Dalam menentukan mannequin klasifikasi apa yang cocok dalam suatu information. Kita perlu mengetahui isi information yang digunakan dan identifikasi masalah yang akan diselesaikan.
Pada pembahasan kali ini menggunakan dataset Crimson Wine High quality. Dalam dataset ini berisi karakteristik fisikokimia dari sampel crimson wine. Dari karakteristik fisikokimia tersebut dapat mengklasifikasikan kualitas crimson wine menjadi dua kategori baik dan tidak baik. Dikategorikan baik jika kualitas lebih dari 6 dan jika kualitas kurang dikategorikan tidak baik.
Dataset Crimson Wine High quality dapat di unduh pada Kaggle. Jika Anda belum masuk ke Kaggle, Anda akan diminta untuk masuk atau mendaftar terlebih dahulu. Setelah masuk, klik tombol “Obtain” yang terletak di sebelah kanan layar. Tunggu hingga unduhan selesai, kemudian ekstrak file yang diunduh (file ZIP) ke direktori yang diinginkan. Setelah mengunduh dan menginstal dataset, dapat mulai mengakses information dengan menggunakan perangkat lunak analisis information seperti Python.
import pandas as pd# Masukan information
information = pd.read_csv('winequality-red.csv')
# Menampilkan information
print(information.head())
fastened acidity risky acidity citric acid residual sugar chlorides
0 7.4 0.70 0.00 1.9 0.076
1 7.8 0.88 0.00 2.6 0.098
2 7.8 0.76 0.04 2.3 0.092
3 11.2 0.28 0.56 1.9 0.075
4 7.4 0.70 0.00 1.9 0.076 free sulfur dioxide complete sulfur dioxide density pH sulphates
0 11.0 34.0 0.9978 3.51 0.56
1 25.0 67.0 0.9968 3.20 0.68
2 15.0 54.0 0.9970 3.26 0.65
3 17.0 60.0 0.9980 3.16 0.58
4 11.0 34.0 0.9978 3.51 0.56
alcohol high quality
0 9.4 5
1 9.8 5
2 9.8 5
3 9.8 6
4 9.4 5
Logistic regression adalah mannequin statistik yang dapat digunakan untuk mengklasifikasikan variabel hasil biner (juga disebut variabel dependen) berdasarkan satu atau lebih variabel prediktor (juga disebut variabel independen). Dalam konteks klasifikasi kualitas wine, logistic regression dapat digunakan untuk mengklasifikasikan wine sebagai baik atau tidak baik berdasarkan karakteristik fisikokimia yang diberikan. Mannequin logistic regression mampu memperkirakan probabilitas variabel hasil yang termasuk dalam kategori tertentu berdasarkan variabel prediktor.
Support Vector Machine (SVM) adalah pengklasifikasi yang membuat batasan untuk memisahkan kelas-kelas yang berbeda. Kemampuan SVM dapat menemukan batas keputusan yang optimum dengan memaksimalkan margin antara kelas-kelas yang berbeda. Hal ini dapat membantu dalam mengklasifikasikan kualitas wine dengan lebih akurat.
Langkah pertama yang harus diambil setelah mendapatkan dataset adalah memahami struktur dataset, termasuk jumlah baris dan kolom, tipe information, dan keterangan setiap kolom.
information.information()
<class 'pandas.core.body.DataFrame'>
RangeIndex: 1599 entries, 0 to 1598
Knowledge columns (complete 12 columns):
# Column Non-Null Depend Dtype
--- ------ -------------- -----
0 fastened acidity 1599 non-null float64
1 risky acidity 1599 non-null float64
2 citric acid 1599 non-null float64
3 residual sugar 1599 non-null float64
4 chlorides 1599 non-null float64
5 free sulfur dioxide 1599 non-null float64
6 complete sulfur dioxide 1599 non-null float64
7 density 1599 non-null float64
8 pH 1599 non-null float64
9 sulphates 1599 non-null float64
10 alcohol 1599 non-null float64
11 high quality 1599 non-null int64
dtypes: float64(11), int64(1)
reminiscence utilization: 150.0 KB
Dalam information ini tidak ada information yang kosong. Untuk melakukan klasifikasi tidak boleh ada information yang kosong, karena akan menghasilkan mannequin dengan kesalahan atau akurasi yang rendah. Maka jika terdapat information yang kosong ada beberapa strategi yang dapat digunakan, seperti mengisi nilai dengan imply, median, atau modus dari kolom yang bersangkutan, atau menghapus baris yang mengandung nilai yang hilang jika jumlahnya tidak signifikan.
Selanjutnya untuk melakukan klasifikasi crimson wine menjadi dua kategori baik dan tidak baik berdasarkan kualitas. Maka perlu memisahkan fitur dan goal dari dataset. Fitur adalah variabel yang digunakan untuk memprediksi goal. Goal adalah variabel yang ingin kita prediksi. Dimana kolom class adalah goal yang ingin kita prediksi.
# Memisahkan fitur dan goal
X = information.drop('high quality', axis=1)
y = information['quality']
Kita memisahkan fitur dan goal dari dataset dengan menggunakan fungsi drop dari library pandas. Fungsi drop digunakan untuk menghapus kolom high quality dari dataset. Setelah itu, kita menyimpan fitur dan goal ke dalam variabel X dan y.
Setelah memisahkan fitur dan goal, kita membagi information menjadi information pelatihan dan information uji. Knowledge pelatihan digunakan untuk melatih mannequin, dan information uji digunakan untuk menguji kinerja mannequin.
from sklearn.model_selection import train_test_split# Memisahkan information coaching dan testing
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Untuk pelatihan dan pengujian kita menggunakan menggunakan 80% information untuk pelatihan dan 20% information untuk pengujian. Pembagian ini dipilih karena memberikan cukup banyak information untuk melatih mannequin, sementara masih menyisakan information yang cukup untuk menguji kinerja mannequin. Parameter random_state digunakan untuk mengatur acak acakan dalam pembagian information. Dengan mengatur random_state, kita dapat memastikan bahwa pembagian information selalu sama setiap kali kita menjalankan koding.
Normalisasi atau standarisasi fitur dalam dataset penting untuk dilakukan agar setiap fitur memiliki skala yang sama, sehingga memudahkan proses analisis dan pemodelan information. Ini juga membantu dalam menghindari fitur yang memiliki skala yang lebih besar mendominasi proses pemodelan.
from sklearn.preprocessing import StandardScaler# Membuat objek StandardScaler
scaler = StandardScaler()
# Melakukan normalisasi atau standarisasi fitur
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.remodel(X_test)
Setelah memisahkan fitur dan goal, membagi information, selanjutnya adalah membuat mannequin. Mannequin Machine Studying yang digunakan untuk klasifikasi adalam Logistic Regression dan SVM.
# Membuat mannequin LogisticRegression
from sklearn.linear_model import LogisticRegressionlr_model = LogisticRegression()
lr_model.match(X_train, y_train)
# Membuat mannequin SVM
from sklearn.svm import SVC
svm_model = SVC(kernel='linear')
svm_model.match(X_train_scaled, y_train)
Dalam melakukan klasifikasi dalam mannequin perlu dilakukan Ok-fold cross-validation. Ok-fold cross-validation yaitu teknik untuk mengevaluasi kinerja mannequin dengan membagi information menjadi okay subset (atau lipatan) dan melatih dan menguji mannequin pada setiap lipatan. Ini membantu mengurangi risiko overfitting dan meningkatkan kemampuan generalisasi mannequin. Untuk mengimplementasikan k-fold cross-validation dalam konteks dataset ini, kita dapat menggunakan fungsi cross_val_score() dari pustaka Scikit-learn.
Ok-fold cross-validation dapat membantu mengurangi bias dan variasi dalam hasil pengujian mannequin. Dengan menggunakan k-fold cross-validation, kita dapat mendapatkan gambaran yang lebih akurat tentang kinerja mannequin dan mengurangi kemungkinan terjadinya overfitting. Hal ini meningkatkan kemampuan generalisasi mannequin dan memastikan bahwa mannequin dapat digunakan dalam situasi actual.
Kita mengimplementasikan k-fold cross-validation dengan menggunakan 5 fold. Setiap fold digunakan untuk melatih dan menguji mannequin logistic regression dan SVM. Hasil dari 5-fold cross-validation adalah rata-rata skor akurasi dari 5 iterasi pembagian information.
# k-fold cross-validation untuk LogisticRegression, okay = 5
scores_lr = cross_val_score(lr_model, X, y, cv=5)print("Skor Logistic Regression :", scores_lr)
print("Imply Logistic Regression :", scores_lr.imply())
# k-fold cross-validation untuk SVM , okay =5
scores_svm = cross_val_score(svm_model, X, y, cv=5)
print("Skor SVM :", scores_svm)
print("Imply SVM :", scores_svm.imply())
Skor Logistic Regression : [0.53125 0.559375 0.60625 0.5875 0.59874608]
Imply Logistic Regression : 0.5766242163009404
Skor SVM : [0.54375 0.521875 0.60625 0.5875 0.59874608]
Imply SVM : 0.5716242163009404
Skor akurasi ini merupakan rata-rata dari kali pengujian mannequin pada setiap fold. Dengan melihat skor akurasi ini, kita dapat mengambil keputusan tentang mannequin mana yang lebih baik atau yang memiliki kemampuan generalisasi yang lebih baik. Didapatkan mannequin Logistic Regression memiliki akurasi yang paling tinggi.
Tidak hanya dengan melihat skor akurasi dalam klasifikasi suatu masalah, akan tetapi perlu juga dilakukan evaluasi kinerja mannequin. Untuk mengevaluasi kinerja Logistic Regression dan SVM, kita menggunakan metrik-metrik yang relevan untuk membantu kita memahami sejauh mana mannequin tersebut mampu mengklasifikasikan kualitas wine menjadi dua kategori baik (lebih dari 6), dan tidak baik.
Metrik yang dapat digunakan adalah akurasi dan presisi. Akurasi memberikan kita gambaran umum tentang sejauh mana mannequin bekerja secara keseluruhan. Sedangkan Presisi membantu kita memahami sejauh mana prediksi mannequin dapat diandalkan.
from sklearn.metrics import accuracy_score, precision_score# Evaluasi mannequin LogisticRegression
y_pred_lr = lr_model.predict(X_test)
print("Akurasi Logistic Regression:", accuracy_score(y_test, y_pred_lr))
print("Presisi Logistic Regression:",precision_score(y_test, y_pred_lr, common='weighted'))
# Evaluasi mannequin SVM
y_pred_svm = svm_model.predict(X_test)
print("Akurasi SVM:", accuracy_score(y_test, y_pred_svm))
print("Presisi SVM:",precision_score(y_test, y_pred_svm, common='weighted'))
Akurasi Logistic Regression: 0.55625
Presisi Logistic Regression: 0.5005045378552662
Akurasi SVM: 0.484375
Presisi SVM: 0.3936674174174174
Dengan menggunakan metrik tersebut, kita dapat membandingkan dua mannequin yang digunakan. Dimana mannequin Logistic Regression menghasilkan nilai akurasi dan presisi yang paling besar. Ini berarti mannequin Logistic Regression bekerja secara keseluruhan atau dengan kata lain mannequin bekerja dengan baik dan mannequin ini dapat diandalkan.
Kita juga perlu untuk mencari parameter terbaik pada mannequin Logistic Regression dan SVM dengan menggunakan Grid Search. Grid Search adalah teknik untuk mencari parameter terbaik pada suatu mannequin machine studying.
from sklearn.model_selection import GridSearchCV# Definisikan parameter grid untuk logistic regression
lr_grid = {
'penalty': ['l1', 'l2'],
'C': [0.1, 1, 10],
'max_iter': [500, 1000, 2000]
}
# Definisikan parameter grid untuk SVM
svm_grid = {
'kernel': ['linear', 'rbf'],
'C': [0.1, 1, 10],
'gamma': [0.1, 1, 10]
}
Grid Search untuk mencari kombinasi hyperparameter yang optimum untuk mannequin Logistic Regression dan SVM. Untuk Logistic Regression, kita mencoba kombinasi penalty, C, dan max_iter. Untuk SVM, kita mencoba kombinasi kernel, C, dan gamma.
# Grid Search untuk logistic regression
grid_search_lr = GridSearchCV(lr_model, lr_grid, cv=5, scoring='accuracy')
grid_search_lr.match(X_train, y_train)print("Parameter terbaik Logistic Regression:", grid_search_lr.best_params_)
print("Skor terbaik Logistic Regression :", grid_search_lr.best_score_)
# Grid Search untuk SVM
grid_search_svm = GridSearchCV(svm_model, svm_grid, cv=5, scoring='accuracy')
grid_search_svm.match(X_train, y_train)
print("Parameter terbaik SVM:", grid_search_svm.best_params_)
print("Skor terbaik Logistic Regression :", grid_search_svm.best_score_)
Parameter terbaik Logistic Regression: {'C': 10, 'max_iter': 2000, 'penalty': 'l2'}
Skor terbaik Logistic Regression : 0.6145955882352941
Parameter terbaik SVM: {'C': 10, 'gamma': 0.1, 'kernel': 'linear'}
Skor terbaik Logistic Regression : 0.5872242647058823
Dengan menggunakan Grid Search dan k-fold cross-validation, kita dapat menemukan kombinasi yang optimum untuk mannequin Logistic Regression dan SVM, sehingga dapat meningkatkan kinerja mannequin pada dataset crimson wine high quality.
Diperoleh mannequin Logistic Regression yang memiliki akurasi paling tinggi. Maka mannequin ini dapat digunakan pada information baru untuk bisa mengklasifikasikan kualitas crimson wine menjadi dua kategori baik dan tidak baik dengan hasil yang akurat. Dimana dikatakan baik jika kualitas lebih dari 6 dan jika kurang maka dikategorikan tidak baik.
# Membuat information baru
new_data = [
[2.9,0.489,0.28,5,0.254,10,29,0.98874,3.15,0.41,4],
]# Melakukan prediksi menggunakan mannequin yang telah dilatih
prediksi = lr_model.predict(new_data)
# Menginterpretasikan output dari mannequin
print("Kualitas:", prediksi)
# Membuat fungsi untuk mengklasifikasikan kualitas wine menjadi dua kategori
def klasifikasi_kualitas(new_data):
prediksi
if prediksi > 6:
return 'baik'
else:
return 'tidak baik'
klasifikasi = klasifikasi_kualitas(new_data)
print("Klasifikasi kualitas wine:", klasifikasi)
Kualitas: [5]
Klasifikasi kualitas wine: tidak baik
Dengan mengikuti tahapan-tahapan ini, kita dapat membangun mannequin yang dapat mengklasifikasikan kualitas crimson wine menjadi dua kategori baik dan tidak baik dengan tingkat akurasi yang tinggi.