Friday, March 8, 2019

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset


Seiring dengan meningkatnya traffic dan kemudahan dalam mengelola content, kami mengucapkan banyak terima kasih kepada para pembaca setia pada blog www.softscients.web.id

Per 19 Maret 2020, kami sedang melakukan migrasi ke domain dan hosting yang lebih baik yaitu
Semoga dengan alamat domain dan hosting terbaru akan semakin memudahkan para pembaca dalam mencari materi/content. Migrasi dilakukan secara bertahap yang membutuhkan waktu yang cukup lama jadi jangan kuatir selama migrasi akan dilakukan secara hati-hati untuk memimalkan broken link

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset

Berbicara analisis data, maka tahap paling penting yaitu feature selection yang berguna untuk ‘membuang’ data yang tidak ada korelasinya, sehingga akan meningkatkan keakuratan data dalam melakukan prediksi.


Untuk contoh simplenya ada di link berikut
http://www.softscients.web.id/2017/11/univariate-feature-selection-for.html

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset
Bahwa paramater/feature volume tidak signifikan terhadap kelas/target dari group. Pada postingan kali ini, kita akan menggunakan analisis korelasi. Secara sederhana, korelasi dapat diartikan sebagai hubungan antara dua variabel yang bersifat kuantitatif.
Lebih lanjut ke  Ref: http://ciputrauceo.net/blog/2016/5/16/pengertian-korelasi-dan-macam-macam-korelasi
Untuk dataset yang digunakan yaitu https://www.kaggle.com/uciml/breast-cancer-wisconsin-data yaitu terdiri dari 31 feature untuk membedakan 2 kelas/target untuk Diagnosis jaringan payudara yaitu M (malignant) dan B (Benign).  Kita akan memberikan 2 perlakuan yaitu tanpa ada seleksi fitur dan dengan seleksi fitur. Seperti biasa, kita akan menggunakan Python, pandas, dan Numpy, Sklearn, untuk melakukan hal tersebut, lebih lanjut ke
http://www.softscients.web.id/2018/11/buku-belajar-mudah-python-dengan.html


#DATASET

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset
Seperti biasa, dataset diatas disajikan menggunakan Pandas, kita akan mengubah beberapa hal yaitu
1.    Menghilangkan kolom id, karena tidak digunakan
2.    Mengubah kolom diagnosis dari M dan B menjadi 1 dan 0


Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.preprocessing import LabelEncoder

data = pd.read_csv('data.csv')
data = data.iloc[:,1:-1]  #remove kolom id
label_encoder = LabelEncoder()
data.iloc[:,0] = label_encoder.fit_transform(data.iloc[:,0]).astype('float64') #mengubah value diagnosis menjadi 1 dan 0

Menyiapkan parameter dan target

paramater = data.iloc[:,1:-1]
target = data.iloc[:,0]

Split dataset dengan 0.2 atau 20% sebagai data test, sisanya 80% sebagai data training

x_train, x_test, y_train, y_test = train_test_split(paramater.values, target.values, test_size = 0.2)

#TANPA ADA SELEKSI FITUR

Untuk teknik clustering yaitu SVC support vector clustering  http://www.scholarpedia.org/article/Support_vector_clustering; https://arxiv.org/abs/1804.10905

svc = SVC() # The default kernel adalah gaussian kernel
svc.fit(x_train, y_train)                        
prediction = svc.predict(x_test)     
print("Akurasi:",metrics.accuracy_score(y_test, prediction))

Menghasilkan

Akurasi: 0.6403508771929824

#DENGAN SELEKSI FITUR

Kita akan menghitung matrix correlation

#menghitung correlation
corr_matrix = paramater.corr().abs()

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset

Pahami bahwa data yang digunakan, adalah matrix segitiga atasnya

#ambil matrix segitiga atas
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))

Temukan nama kolom dengan nilai diatas 0.9

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset

Bila menggunakan excel sebagai berikut

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset

Maka kolom dengan tanda merah, akan dihapus

#temukan feature dengan correlation diatas 0.9
to_drop = [column for column in upper.columns if any(upper[column] > 0.9)]
for ls in to_drop:
    paramater=paramater.drop([ls],axis=1)


Berikut nama feature yang dibuang

Buku Belajar Machine Learning dengan Python-Feature Selection untuk Meningkatkan Akurasi Dataset



Dengan clustering SVC seperti diatas

x_train, x_test, y_train, y_test = train_test_split(paramater.values, target.values, test_size = 0.2)

svc = SVC() # The default kernel adalah gaussian kernel
svc.fit(x_train, y_train)                        
prediction = svc.predict(x_test)     
print("Akurasi:",metrics.accuracy_score(y_test, prediction))

Menghasilkan

Akurasi: 0.9473684210526315

Tingkat akurasi data jauh meningkat dari semula 0.64 menjadi 0.94
Ref:
https://medium.com/@mehulved1503/feature-selection-and-feature-extraction-in-machine-learning-an-overview-57891c595e96

Kode Lengkap untuk Tanpa Seleksi Fitur


import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.preprocessing import LabelEncoder
from sklearn.svm import SVC

np.random.seed(123)
data = pd.read_csv('data.csv')
data = data.iloc[:,1:-1]  #remove kolom id
label_encoder = LabelEncoder()
data.iloc[:,0] = label_encoder.fit_transform(data.iloc[:,0]).astype('float64') #mengubah value diagnosis menjadi 1 dan 0

paramater = data.iloc[:,1:-1]
target = data.iloc[:,0]


x_train, x_test, y_train, y_test = train_test_split(paramater.values, target.values, test_size = 0.2)

svc = SVC() # The default kernel adalah gaussian kernel
svc.fit(x_train, y_train)                        
prediction = svc.predict(x_test)     
print("Akurasi:",metrics.accuracy_score(y_test, prediction))

Dengan Seleksi Fitur


import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.preprocessing import LabelEncoder
from sklearn.svm import SVC

np.random.seed(123)
data = pd.read_csv('data.csv')
data = data.iloc[:,1:-1]  #remove kolom id
label_encoder = LabelEncoder()
data.iloc[:,0] = label_encoder.fit_transform(data.iloc[:,0]).astype('float64') #mengubah value diagnosis menjadi 1 dan 0

paramater = data.iloc[:,1:-1]
target = data.iloc[:,0]

#menghitung correlation
corr_matrix = paramater.corr().abs()
#ambil matrix segitiga atas
upper = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool))

#temukan feature dengan correlation diatas 0.9
to_drop = [column for column in upper.columns if any(upper[column] > 0.9)]
for ls in to_drop:
    paramater=paramater.drop([ls],axis=1)


x_train, x_test, y_train, y_test = train_test_split(paramater.values, target.values, test_size = 0.2)

svc = SVC() # The default kernel adalah gaussian kernel
svc.fit(x_train, y_train)                        
prediction = svc.predict(x_test)     
print("Akurasi:",metrics.accuracy_score(y_test, prediction))




No comments:

Post a Comment