- Impor dataset anggur merah ke dalam atmosphere
redwine = pd.read_csv("/content material/winequality-red.csv", delimiter=',')
redwine
2. Melihat data dataset
redwine.data()
<class 'pandas.core.body.DataFrame'>
RangeIndex: 1599 entries, 0 to 1598
Knowledge columns (whole 12 columns):
# Column Non-Null Depend Dtype
--- ------ -------------- -----
0 mounted 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 whole 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
3. Melihat ada atau tidak nilai null pada dataset
redwine.isnull().sum()
mounted acidity 0
risky acidity 0
citric acid 0
residual sugar 0
chlorides 0
free sulfur dioxide 0
whole sulfur dioxide 0
density 0
pH 0
sulphates 0
alcohol 0
high quality 0
dtype: int64
4. Menghapus duplikat pada dataset
redwine.drop_duplicates(inplace = True)
redwine.duplicated().sum()
0
5. Menghilangkan nilai outlier
# menghilangkan outlier
corr = redwine.corr()["quality"].sort_values(ascending=False)
corr
high quality 1.000000
alcohol 0.480343
sulphates 0.248835
citric acid 0.228057
mounted acidity 0.119024
residual sugar 0.013640
free sulfur dioxide -0.050463
pH -0.055245
chlorides -0.130988
whole sulfur dioxide -0.177855
density -0.184252
risky acidity -0.395214
Identify: high quality, dtype: float64
# choose which have correlation > 0.2 (both optimistic or unfavourable, however not together with goal values)
selected_cols = corr[abs(corr) > 0.2].index.tolist()
selected_cols.take away("high quality")
selected_cols
['alcohol', 'sulphates', 'citric acid', 'volatile acidity']
## drop outliers of that options utilizing IQR
for i in selected_cols:
Q1 = redwine[i].quantile(0.25)
Q3 = redwine[i].quantile(0.75)
IQR = Q3 - Q1
redwine = redwine[~((redwine[i] < (Q1 - 1.5 * IQR)) | (redwine[i] > (Q3+1.5*IQR)))]
6. Membagi information menjadi prepare information dan check information
Sebelum membagi X dan y ke dalam prepare information dan check information untuk SVM ( Assist Vector Machine ), diperlukan proses mengubah nilai kualitas menjadi kategori terlebih dahulu. Kategori yang sudah ditentukan yaitu, jika lebih dari 6 ( > 6 ) maka dikategorikan baik yang mana anggur merah tersebut kualitasnya baik sedangkan kurang dari 6 ( < 6 ) maka dikategorikan tidak baik yang mana anggur merah tersebut kualitasnya tidak baik.
# bagi information prepare dan check information
## klasifikasi kualitas baik >6 redwine
y = redwine['quality']>6
y
0 False
1 False
2 False
3 False
5 False
...
1593 False
1594 False
1595 False
1597 False
1598 False
Identify: high quality, Size: 1268, dtype: bool
## membuat dataframe untuk variabel independen yg dikategorikan tidak baik
X = redwine.iloc[:,:-1]
X
Knowledge dibagi menjadi prepare dan check untuk mengevaluasi kinerja mannequin. Knowledge prepare digunakan untuk melatih mannequin, sedangkan information check digunakan untuk mengevaluasi kinerja mannequin pada information baru.
Penting untuk membagi information menjadi prepare dan check untuk menghindari overfitting. Overfitting adalah kondisi di mana mannequin terlalu cocok dengan information prepare dan tidak dapat generalisasi ke information baru. Dengan membagi information menjadi prepare dan check, kita dapat mengevaluasi kinerja mannequin pada information baru dan memastikan bahwa mannequin tidak overfit.
## bagi information prepare dan check
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42,test_size=0.2)
print(X_train.form)
print(X_test.form)
print(y_train.form)
print(y_test.form)
(1014, 11)
(254, 11)
(1014,)
(254,)
Dalam melakukan klasifikasi untuk dataset anggur merah berisi beberapa mannequin yang dapat digunakan yaitu, SVM ( Assist Vector Machine ), k-fold Cross Validation dengan menggunakan Random Forest yang terdapat dalam Grid Search dan KNN ( Ok- Nearest Neighboard). Tetapi, SVM ( Assist Vector Machine ) merupakan mannequin dengan performa yang paling baik karena memiliki nilai akurasi yang tepat.
Dataset anggur merah juga berisi information numerik dan kategorik yang tidak linier dan tidak seimbang. Mannequin SVM dapat menangani semua karakteristik ini, sehingga merupakan pilihan yang baik untuk dataset anggur merah. Selain itu, mannequin SVM ( Assist Vector Machine ) dapat diinterpretasikan dengan mudah.
- Impor library yang diperlukan untuk membangun mannequin SVM
import pandas as pd
import numpy as np
import seaborn as snsfrom sklearn.preprocessing import StandardScaler
scaler=StandardScaler() # creating occasion of StandardScaler
from sklearn.metrics import confusion_matrix, recall_score, classification_report, ConfusionMatrixDisplay
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn import metrics
2. Menskalakan fitur variabel independen
Menskalakan fitur variabel independen pada prepare information yang bertujuan untuk memastikan bahwa semua fitur berada dalam rata — rata 0 dan standar deviasi 1, sehingga tidak ada fitur yang mendominasi proses. Menskalakan fitur variabel independen pada check information yang bertujuan untuk memastikan konsistensi dalam pemrosesan information antara information latih dan information uji.
# menskalakan fitur prepare information
scaler=StandardScaler()
scaler_X_train=scaler.fit_transform(X_train)
scaler_X_train
array([[-0.59405606, -0.44846705, 0.49759956, ..., 0.10499599,
1.67309339, 0.08787241],
[-0.77084324, -0.62629886, 0.44453762, ..., 0.17476396,
-0.72130489, -1.1746171 ],
[ 0.17202171, -0.32991251, 0.02004213, ..., -0.94152366,
1.41655072, 0.76767446],
...,
[-0.88870136, 2.30792607, 0.126166 , ..., 1.50035551,
-0.80681912, 0.67055988],
[-0.77084324, 0.08502839, -0.93507272, ..., 0.80267575,
-0.379248 , 1.05901819],
[-1.41906289, -0.50774432, -1.41263015, ..., 1.15151563,
1.84412184, 1.25324734]])
# menskalakan fitur check information
scaler_X_test=scaler.remodel(X_test)
scaler_X_test
array([[-0.77084324, 0.14430567, -0.72282498, ..., 0.31429992,
-0.379248 , -0.68904421],
[-0.06369453, -1.21907158, 0.81597118, ..., -0.31361187,
-0.72130489, 1.83593481],
[ 0.52559607, 0.38141475, -0.13914368, ..., -0.38337985,
0.3048658 , -0.78615879],
...,
[ 0.23095077, -0.38918978, 0.23228988, ..., -1.49966747,
0.90346537, -0.78615879],
[-0.47619794, -0.74485341, -0.77588691, ..., 0.38406789,
0.56140847, -0.10635674],
[-0.2404817 , 0.02575112, -0.13914368, ..., -0.31361187,
-0.80681912, -0.98038794]])
3. Membuat mannequin SVM ( Assist Vector Machine )
Kode ini membuat mannequin SVM ( Assist Vector Machine ) linier dan kemudian melatih mannequin tersebut pada information pelatihan. Mannequin SVM kemudian dapat digunakan untuk memprediksi label information baru.
svm = SVC(kernel='linear')
svm.match(X_train, y_train)
4. Melakukan prediksi menggunakan SVM ( Assist Vector Machine )
Kode ini menggunakan mannequin SVM ( Assist Vector Machine ) linier yang telah dilatih sebelumnya untuk memprediksi label information uji. Prediksi ini kemudian dapat digunakan untuk mengevaluasi kinerja mannequin.
# melakukan prediksi
y_pred = svm.predict(X_test)
y_pred
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False])
5. Melakukan evaluasi mannequin
Kode ini menggunakan fungsi classification_report()
untuk mencetak laporan klasifikasi yang berisi akurasi, presisi, recall, dan F1-score dari prediksi mannequin. Laporan klasifikasi ini dapat digunakan untuk mengevaluasi kinerja mannequin dan membandingkan kinerja mannequin dengan mannequin lain.
print(classification_report(y_test, y_pred))
precision recall f1-score helpFalse 0.87 1.00 0.93 222
True 0.00 0.00 0.00 32
accuracy 0.87 254
macro avg 0.44 0.50 0.47 254
weighted avg 0.76 0.87 0.82 254
Berdasarkan hasil klasifikasi yang dilakukan untuk variabel y check dan y prediksi menunjukkan bahwa mannequin SVM ( Assist Vector Machine ) mencapai akurasi 0.87 atau 87%. Dengan tingkat akurasi sebesar 87%, ini mengindikasikan bahwa mannequin berhasil mengklasifikasikan 87% dari information uji secara tepat.
Ok — fold cross-validation merupakan sebuah teknik yang digunakan untuk mengukur kinerja dari suatu mannequin machine studying. Proses k-fold cross-validation melibatkan pembagian dataset menjadi ok subset (fold) yang sama besar. Namun, k-fold cross-validation juga membutuhkan komputasi yang lebih besar karena melibatkan iterasi yang lebih banyak, terutama jika ok besar.
Keuntungan dari k-fold cross-validation adalah mengurangi variabilitas dari hasil evaluasi mannequin karena melibatkan pengujian pada beberapa subset information dan memanfaatkan information secara maksimal untuk evaluasi dan pelatihan mannequin.
Pada situasi dataset anggur merah ini, k-fold cross validation dapat diimplementasikan dengan membagi information menjadi 2 subset dan melakukan coaching dan testing secara bergantian. Dalam dataset anggur merah ini nilai parameter ok yang digunakan adalah 7 menyesuaikan dengan ukuran dataset.
Ok — fold cross-validation berfungsi untuk menyelesaikan permasalahan overfitting dan generalisasi mannequin. Mengurangi risiko overfitting dapat diatasi dengan membagi information menjadi ok bagian yang sama besar dan menggunakannya secara bergantian sebagai prepare information dan check information.
Dengan demikian, k-fold cross-validation membantu menghindari penyesuaian yang berlebihan pada information pelatihan tertentu dan memastikan bahwa mannequin memiliki kemampuan generalisasi yang baik terhadap information baru.
Pada pelatihan dan evaluasi mannequin dengan menggunakan ok — fold cross validation dengan langkah — langkah sebagai berikut:
#Ok-FOLD CROSS VALIDATION
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier# Inisialisasi mannequin
rf_classifier = RandomForestClassifier()
# Melakukan k-fold cross-validation dengan ok=5
# di sini, kita menggunakan RandomForestClassifier sebagai mannequin
# dan X_train dan y_train sebagai information latih
# cv=5 berarti kita menggunakan 5 fold cross-validation
# scoring='accuracy' berarti kita mengevaluasi mannequin berdasarkan akurasi
scores = cross_val_score(rf_classifier, X_train, y_train, cv=5, scoring='accuracy')
# Menampilkan hasil cross-validation
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.imply(), scores.std() * 2))
Accuracy: 0.89 (+/- 0.02)
Dengan menggunakan ok — fold cross validation yang mana cv = 5 dan hasil nilai akurasi klasifikasi dengan menggunakan random forest adalah 0.89 (+/ — 0.02) yang artinya nilainya berada di antara 0.87 dan 0.91.
Metrik yang digunakan untuk mengevaluasi kinerja mannequin yaitu :
# knn
from sklearn.neighbors import KNeighborsClassifier
model_knn = KNeighborsClassifier(n_neighbors=7) # 7 bole beda batasnya 9
model_knn.match(X,y)
y_pred = model_knn.predict(X)
print(metrics.accuracy_score(y, y_pred))
0.8832807570977917
Metrik yang digunakan untuk mengevaluasi kinerja mannequin yaitu dengan KNN ( Ok- Nearest Neighboard) dengan nilai classifier n = 7. Kemudian, dari metrik tersebut dapat diketahui nilai akurasi dengan mannequin KNN ( Ok- Nearest Neighboard) sebesar 0.88 atau 88%. Pembuatan metrik yang tepat dalam mengevaluasi kinerja mannequin KNN ( Ok- Nearest Neighboard) penting karena algoritma KNN sensitif terhadap berbagai faktor, seperti jumlah tetangga yang dipilih (nilai Ok), metrik jarak yang digunakan, dan distribusi information. Dalam konteks ini, pembuatan metrik penting untuk membandingkan nilai akurasi dengan mannequin lain.
Dari hasil pelatihan dan evaluasi mannequin dengan menggunakan ok — fold Cross Validation dihasilkan nilai akurasi yaitu di antara 0.87 dan 0.91 atau di antara 87% dan 91% sedangkan, metrik mannequin KNN ( Ok- Nearest Neighboard) dihasilkan nilai akurasi yaitu 0.88 atau 88%.
Hyperparameter tuning adalah proses menemukan nilai terbaik untuk parameter mannequin pembelajaran mesin yang tidak dipelajari dari information.Proses optimasi mannequin atau hyperparameter tuning sangat berguna untuk meningkatkan performa dengan menyesuaikan parameter. Nilai parameter ini memiliki dampak besar pada kinerja mannequin yang mana penting untuk mengatur nilainya secara optimum. Untuk dataset anggur merah menggunakan metode Grid Search. Grid search adalah teknik yang mencoba semua kombinasi nilai parameter yang berbeda dan memilih kombinasi yang menghasilkan kinerja terbaik.
Dalam kasus ini, saya mencoba berbagai nilai untuk parameter C dan gamma. Dapat ditemukan bahwa nilai C=1.0 dan gamma=’auto’ menghasilkan kinerja terbaik.
svc_clf = SVC(C=1.0,
kernel='rbf',
diploma=3,
gamma='auto',
coef0=0.0, shrinking=True,
chance=False,
tol=0.001, cache_size=200,
class_weight=None,
verbose=False, max_iter=-1,
decision_function_shape='ovr',
break_ties=False,random_state=None)svc_clf.match(scaler_X_train,y_train)
Untuk memprediksi information baru dengan menggunakan mannequin yang telah dilatih maka berikut adalah langkah — langkah yang dilakukan :
- Melakukan prediksi dari mannequin yang telah dilatih
Melakukan prediksi dengan menggunakan svm yang telah dievaluasi dengan nilai skala X check information.
# Melakukan Prediksi Menggunakan SVM yang Telah Dievaluasi
svc_clf_predictions=svc_clf.predict(scaler_X_test)
svc_clf_predictions
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, True, False, False, False,
False, False, False, False, False, False, False, False, False,
False, True, False, False, False, False, False, False, False,
False, False, False, False, False, False, True, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
True, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, True, False, True, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, True, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, True, False, False, False,
False, False, False, False, True, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, True, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, True,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, True, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, True, False, False, False, False, False, False, False,
False, False])
2. Melihat nilai akurasi
print(classification_report(y_test, svc_clf_predictions))
precision recall f1-score helpFalse 0.90 0.97 0.93 222
True 0.54 0.22 0.31 32
accuracy 0.88 254
macro avg 0.72 0.60 0.62 254
weighted avg 0.85 0.88 0.85 254
3. Mengimpor information baru
## information baru
import pandas as pd# Membaca file csv
databaru = pd.read_csv("/content material/data_baru.csv")
print(databaru)
mounted acidity risky acidity citric acid residual sugar chlorides
0 10.2 0.5 0 3.45 0.111 free sulfur dioxide whole sulfur dioxide density pH sulphates
0 13 75 0.9834 3.22 0.84
alcohol
0 10.6
4. Mencari hasil klasifikasi information baru dari nilai prediksi
svc_clf_predictions=svc_clf.predict(databaru)
print(svc_clf_predictions)
[False]
Dari hasil klasifikasi information baru didapatkan, yaitu “ False” yang artinya dataset yang baru ditambahkan merupakan anggur merah dengan klasifikasi kualitasnya tidak baik atau nilai kualitasnya kurang dari 6 ( < 6 ).
Berdasarkan hasil pengujian mannequin terhadap pengklasifikasian dataset anggur merah menunjukan bahwa mannequin SVM (Assist Vector Machine) cukup baik untuk dataset anggur merah yang mana nilai akurasinya mencapai 0.88 atau 88%. Klasifikasi anggur merah menggunakan SVM dapat dilakukan untuk menilai kualitas anggur merah. Sehingga, hasil ini menunjukkan bahwa SVM adalah alat yang efektif untuk mengklasifikasikan anggur merah.