Machine Learning: Naive Bayes

Machine Learning: Naive Bayes

STUDI KASUS

Masih dengan masalah yang sama di pembahasan klasifikasi, kali ini kita akan membantu pemilik showroom mobil untuk mengiklankan produk SUV nya di media sosial. Ia ingin agar iklannya ditempatkan di zona di mana semakin banyak orang yang memutuskan untuk membeli produknya. Kita akan membantunya dengan mengolah data pelanggan yang sudah diberikan ke kita.

Sebelum memulai pembahasan dengan bahasa Python dan R, silakan download dulu data set nya di link ini.


Bahasa Python

# Mengimpor library yang diperlukan
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Mengimpor dataset
dataset = pd.read_csv('Iklan_sosmed.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

# Menjadi dataset ke dalam Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Membuat model Naive Bayes terhadap Training set
from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(X_train, y_train)

# Memprediksi hasil test set
y_pred = classifier.predict(X_test)

# Membuat confusion matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

# Visualisasi hasil model Naive Bayes dari Training set
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Naive Bayes (Training set)')
plt.xlabel('Usia')
plt.ylabel('Estimasi Gaji')
plt.legend()
plt.show()

# Visualisasi hasil model Naive Bayes dari Test set
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Naive Bayes (Test set)')
plt.xlabel('Usia')
plt.ylabel('Estimasi Gaji')
plt.legend()
plt.show()

Penjelasan:

  • Line 2-4 mengimpor library yang diperlukan.
  • Line 7 mengimpor datasetnya.
  • Line 8 mendefinisikan variabel X dengan melakukan slicing.
  • Line 9 mendefinisikan variabel y dengan melakukan slicing.
  • Line 12 mengimpor library train_test_split dari sklearn.model_selection.
  • Line 13 membagi dataset ke dalam training dan test set.
  • Line 16 mengimpor library StandardScaler untuk melakukan feature scaling.
  • Line 17 mendefinisikan variabel sc untuk melakukan feature scaling.
  • Line 18-19 melakukan feature scaling.
  • Line 22 mengimpor library GaussianNB untuk membuat model naive bayes di line selanjutnya.
  • Line 23 mendefinisikan variabel classifier untuk proses naive bayes.
  • Line 24 membuat model naive bayes untuk training set.
  • Line 27 mendefinisikan y_pred untuk memprediksi hasil model naive bayes ke test set.
  • Line 30 mengimpor library confusion_matrix untuk melihat performa modelnya (membandingkan training dan test set)
  • Line 31 mendefinisikan variabel cm sebagai confusion matrixnya. Hasilnya sebagai berikut:
Confusion matrix naive bayes

Bisa dilihat bahwa model kita sudah cukup baik. Terlihat bahwa dari 100 prediksi test set, kita salah memprediksi sebanyak 3+7 = 10 data. Sehingga tingkat akurasi kita 90%. Sangat baik!

  • Line 34-49 adalah perintah untuk visualisasi hasil model training set. Jika dieksekusi maka akan tampak sebagai berikut:
Hasil naive bayes untuk training set

Zona merah adalah zona di mana data pelanggan memutuskan untuk tidak membeli. Sementara zona hijau adalah zona di mana pelanggan memutuskan untuk membeli. Dua zona ini adalah hasil dari model naive bayes yang dibuat.

Titik-titik adalah data pelanggan. Titik merah adalah data pelanggan yang memutuskan untuk tidak membeli, sementara titik hijau adalah data pelanggan memutuskan untuk membeli mobil.

Titik merah yang berada di zona hijau adalah prediksi yang salah. Begitu juga dengan titik hijau yang berada di zona merah juga merupakan prediksi yang salah.

Hasil naive bayes untuk test set

Hasil visualisasi test set cukup baik. Seperti yang di bahas di bagian confusion matrix di atas, terlihat bahwa dari 100 prediksi, model ini hanya meleset sebanyak 10 titik. Dengan begitu, akurasinya 90%!

Oleh karena itu, melalui model naive bayes yang sudah dibuat, kita sarankan kepada pemilik showroom mobil untuk mengiklankan produknya di zona hijau. Dengan demikian, probabilitas (peluang) calon pelanggan setelah melihat iklannya akan naik.

Untuk melanjutkan membaca pembahasan dengan bahasa R, silakan klik tombol halaman selanjutnya di bawah ini.

Pages: 1 2 3 4 5 6

Subscribe
Notify of
guest

6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
nan
nan
6 years ago

visualnya error kalo featurenya lebih dari 2, gimana ya pak caranya

Asep Muhidin
Asep Muhidin
6 years ago

Maaf pak. Mengapa feature ‘kelamin’ tidak dimasukkan ?

Jacoub
Jacoub
4 years ago

Halo Pak Mega,

Dalam 2 ilustrasi yang bapak Jelaskan, saya bingung dalam menentukan variabel dari formula bayes tsb, bukan kah P(M2) diilustrasi pertama sama dengan P(Motor) / P(Mobil) diilustrasi kedua karena memiliki sampel yang homogen jika dibandingkan dengan seluruh sampel, sedangkan P(Cacat) sama dengan P(X) karena kedua himpunan tsb teresbut terbentuk dari suatu kondisi dan memiliki sampel yang tidak homogen. Lalu di Ilustrasi pertama variabel P(M2) adalah pembagi, sedangkan di ilustrasi kedua variabel P(X) adalah Pembagi. kira2 bagaimana pak penjelasannya?

Terima kasih