Cara menggunakan log likelihood in python

python data-mining naive-bayes python3 naive-bayes-classifier classification naive-algorithm data-mining-algorithms naive-bayes-algorithm naivebayes naive-bayes-classification naive maximum-likelihood-estimation maximum-a-posteriori-estimation log-likelihood naive-bayes-tutorial naive-bayes-implementation laplace-smoothing

  • UpdatedMar 27, 2018
  • Python

RaczeQ / naive-bayes-classifier

Star 0

  • Code
  • Issues
  • Pull requests

A Python implementation of Naive Bayes from scratch. Repository influenced by https://github.com/gbroques/naive-bayes

python data-mining naive-bayes python3 naive-bayes-classifier classification python-3 data-mining-algorithms naive-bayes-algorithm naivebayes naive-bayes-classification naive maximum-likelihood-estimation maximum-a-posteriori-estimation log-likelihood naive-bayes-implementation

  • UpdatedMar 17, 2019
  • Python

mustafa1728 / Robot_Localization

Star 0

  • Code
  • Issues
  • Pull requests

Robot Localization using Hidden Markov Model

hmm localisation estimation artificial-intelligence sensors hmm-model hmm-viterbi-algorithm log-likelihood most-likely-path

Loss Function – Saat mengerjakan Machine Learning / Deep Machine Learning menggunakan loss function/fungsi kerugian/biaya digunakan untuk mengoptimalkan model selama pelatihan. Tujuannya hampir selalu untuk meminimalkan minimize loss function/fungsi kerugian. Semakin rendah kerugian, semakin baik modelnya. Pada PyTorch ada banyak jenis loss function seperti MSE, Cross Entropy dan yang lainnya.

Loss function digunakan untuk mengukur kesalahan antara keluaran prediksi dan nilai target yang diberikan. Sebuah loss function memberitahu kita seberapa jauh model algoritma dari mewujudkan hasil yang diharapkan. Kata ‘loss’ berarti penalit/hukuman yang didapat model karena gagal memberikan hasil yang diinginkan. Misalnya, fungsi kerugian (sebut saja J) dapat mengambil dua parameter berikut:

  • Output yang diprediksi (y_pred)
  • Nilai target (y)

Cara menggunakan log likelihood in python

Fungsi ini akan menentukan kinerja model dengan membandingkan keluaran yang diprediksi dengan keluaran yang diharapkan. Jika deviasi antara y_pred dan y sangat besar, nilai loss akan sangat tinggi.

Jika penyimpangannya kecil atau nilainya hampir sama, itu akan menghasilkan nilai loss yang sangat rendah. Oleh karena itu, kalian perlu menggunakan loss function yang dapat membuat penalti / menghukum model dengan benar saat melakukan proses pelatihan. Loss function berubah berdasarkan pernyataan masalah yang coba dipecahkan oleh algoritme kita pilih.

Bagaimana cara menambahkan loss function PyTorch

Contents

Modul torch.nn PyTorch memiliki beberapa loss function standar yang dapat kita gunakan, untuk menambahkannya, kita harus terlebih dahulu mengimpor perpustakaan:

Copy Code Copied! Use a different Browser


import torch
import torch.nn as nn

Selanjutnya, tentukan jenis loss function yang ingin digunakan. Berikut adalah cara untuk mendefinisikan fungsi mean absolute error loss:

Copy Code Copied! Use a different Browser


loss = nn.L1Loss()

 

Jenis Loss Function

Ada banyak jenis loss function yang bisa kalian pakai, yaitu

  1. Regression Loss Functions
    1. Mean Squared Error Loss
    2. Mean Squared Logarithmic Error Loss
    3. Mean Absolute Error Loss
  2. Binary Classification Loss Functions
    1. Binary Cross-Entropy
    2. Hinge Loss
    3. Squared Hinge Loss
  3. Multi-Class Classification Loss Functions
    1. Multi-Class Cross-Entropy Loss
    2. Sparse Multiclass Cross-Entropy Loss
    3. Kullback Leibler Divergence Loss

Lebih lengkapnya yaitu

1. Mean Absolute Error (L1 Loss Function)

Mean Absolute Error (MAE), juga disebut L1 Loss, menghitung rata-rata jumlah perbedaan mutlak antara nilai aktual dan nilai prediksi.

Ini memeriksa ukuran kesalahan dalam satu set nilai yang diprediksi, tanpa mempedulikan arah positif atau negatifnya. Jika nilai absolut dari kesalahan tidak digunakan, maka nilai negatif dapat membatalkan nilai positif.

   

Cara menggunakan log likelihood in python

Kapan itu bisa digunakan?

Masalah regresi, terutama ketika distribusi variabel target memiliki outlier, seperti nilai-nilai kecil atau besar yang sangat jauh dari nilai rata-rata. Hal ini dianggap lebih kuat untuk outlier.

Copy Code Copied! Use a different Browser


import torch
import torch.nn as nn

input = torch.randn(3, 5, requires_grad=True)
target = torch.randn(3, 5)

mae_loss = nn.L1Loss()
output = mae_loss(input, target)
output.backward()

print(‘input: ‘, input)
print(‘target: ‘, target)
print(‘output: ‘, output)

2. Loss Function MSE (L2 Loss function)

Mean Squared Error (MSE), juga disebut L2 Loss, menghitung rata-rata perbedaan kuadrat antara nilai aktual dan nilai prediksi. Pytorch MSE Loss selalu menghasilkan hasil positif, terlepas dari tanda nilai aktual dan prediksi. Untuk meningkatkan akurasi model, kita harus mencoba mengurangi L2 Loss sekecil mungkin atau mencapai nilai sempurna adalah 0,0.

Copy Code Copied! Use a different Browser


torch.nn.MSELoss

Rumus MSE yaitu

   

Cara menggunakan log likelihood in python

MSE digunakan untuk kasus seperti kasus regression. Ada 3 yang digunakan yaitu ‘none’ | ‘mean’ | ‘sum’. Saya akan demokan cara menghitung secara manual. Misalkan jika kita memilih opsi mean

Copy Code Copied! Use a different Browser


import torch
import torch.nn

a = torch.Tensor([2.0,3.0,8.0])
b = torch.Tensor([4.0,6.0,7.0])

torch.sum((a-b)**2)/3

atau bila dalam pytorch yaitu

Copy Code Copied! Use a different Browser


loss_mse = torch.nn.MSELoss(reduction=’mean’)
loss_mse(a,b)

Kalian bisa coba-coba untuk mengganti reduction = ‘ sum’

Mengapa menggunakan loss function MSE?

MSE sensitif terhadap outlier dan diberikan beberapa contoh dengan nilai fitur input yang sama, prediksi optimal akan menjadi nilai target rata-ratanya. Ini harus dibandingkan dengan Mean Absolute Error, di mana prediksi optimal adalah median. Oleh karena itu, MSE baik digunakan jika yakin bahwa data target yang dikondisikan pada input, terdistribusi secara normal di sekitar nilai rata-rata

Kapan menggunakan loss function MSE?

Gunakan MSE saat melakukan regresi, percaya bahwa target Anda, dikondisikan pada input, terdistribusi normal, dan ingin kesalahan besar secara signifikan (kuadrat) lebih diberikan perhitungan daripada kesalahan kecil.

Contoh: kalian ingin memprediksi harga rumah di masa depan. Harga adalah nilai kontinu, oleh karena itu kami ingin melakukan regresi. MSE di sini dapat digunakan sebagai fungsi kerugian.

Tidak cocok menggunakan loss function MSE

Tidak cocok menggunakan loss function MSE jika target yang digunakan berupa one hot encoding yaitu kasus yang berkaitan dengan klasifikasi. Misalkan saja kasus 3 kelas yang dibuat one hot encoding

  • [1,0,0] : kelas 1
  • [0,1,0]: kelas 2
  • [0,0,1]: kelas 3

Kita coba saja misalkan terdapat hasil prediksi [0.5,0.5,1] maka akan masuk kelas yang mana?

Copy Code Copied! Use a different Browser


class1 = torch.Tensor([1,0,0])
class2 = torch.Tensor([0,1,0])
class3 = torch.Tensor([0,0,1])
prediksi = torch.Tensor([0.5,0.5,1])

loss_mse(class1,prediksi)
loss_mse(class2,prediksi)
loss_mse(class3,prediksi)

maka untuk akan sulit jika hasil point 1 dan 2 adalah sama yaitu 1.5 untuk itu loss function MSE tidak cocok untuk klasifikasi dengan target one hot encoding diperlukan loss function yang lain. Untuk target one hot encoding sudah jarang digunakan bahkan untuk pytorch tidak menyediakan khusus untuk hal tersebut.

3. Negative Log-Likelihood Loss Function

Fungsi Negatif Log-Likelihood Loss (NLL) hanya diterapkan pada model dengan fungsi softmax sebagai lapisan aktivasi keluaran. Softmax mengacu pada fungsi aktivasi yang menghitung fungsi eksponensial yang dinormalisasi dari setiap unit di lapisan.

Fungsi Softmax dinyatakan sebagai:

   

Cara menggunakan log likelihood in python

NLL menggunakan konotasi negatif karena probabilitas (atau kemungkinan) bervariasi antara nol dan satu, dan nilai logaritma dalam rentang ini negatif. Pada akhirnya, nilai kerugian menjadi positif.

Di NLL, meminimalkan fungsi kerugian membantu kita mendapatkan output yang lebih baik. Kemungkinan log negatif diperoleh dari perkiraan perkiraan kemungkinan maksimum (MLE). Ini berarti bahwa kita mencoba untuk memaksimalkan kemungkinan log model, dan sebagai hasilnya, meminimalkan NLL.

Dalam NLL, model akan diberikan penalti / hukuman karena membuat prediksi yang benar dengan probabilitas yang lebih kecil dan didorong untuk membuat prediksi dengan probabilitas yang lebih tinggi. NLL tidak hanya peduli tentang prediksi yang benar tetapi juga tentang model yang yakin tentang prediksi dengan skor tinggi.

Misalkan kita punyai 3 record dengan 5 ciri fitur/paramater yaitu

Copy Code Copied! Use a different Browser


m = nn.LogSoftmax(dim=1)
nll_loss = nn.NLLLoss()
# size of input (N x C) is = 3 x 5
input = torch.randn(5, 4, requires_grad=True)
# every element in target should have 0 <= value < C
target = torch.tensor([0,1,2,3,3])

output = nll_loss(m(input), target)
output.backward()

print(‘input: ‘, input)
print(‘target: ‘, target)
print(‘output: ‘, output)

arti dari

  • m = nn.LogSoftmax(dim=1) artinya akan di kalkulasi berdasarkan perbaris yaitu dim=1 kalau diubah perkolom menjadi dim=0. Pytorch menganut jumlah sample sebagai baris/record dengan jumlah ciri fitur sebagai kolom. Misalkan kita mempunyai 100 record dengan 3 ciri fitur maka torch.randn(100, 3, requires_grad=True)
  • # size of input (N x C) is = 3 x 5 yaitu kita mempunyai 3 record dengan 5 fitur
  • # every element in target should have 0 <= value < C artinya kita harus mempunyai target dengan rentang tersebut

Kapan itu bisa digunakan?

Masalah klasifikasi multi-kelas, jadi misalkan ada 4 kelas kalian bisa menggunakan target nilai 0,1,2,3

Cara menggunakannya

Kalian bisa melihat  Cara menggunakan loss function Negative log likelihood loss nn.NLLLoss

4. Cross-Entropy Loss Function

Copy Code Copied! Use a different Browser


torch.nn.CrossEntropyLoss

Loss function ini menghitung perbedaan antara dua distribusi probabilitas untuk serangkaian kejadian atau variabel acak yang disediakan.

Ini digunakan untuk menghitung skor yang merangkum perbedaan rata-rata antara nilai yang diprediksi dan nilai sebenarnya. Untuk meningkatkan akurasi model, kalian harus mencoba meminimalkan skor—skor lintas entropi antara 0 dan 1, dan nilai sempurna adalah 0.

Loss function lainnya, seperti MSE memberikan penalti prediksi yang salah. Cross-Entropy akan memberikan penalti yang banyak. Berbeda dengan Negatif Log-Likelihood Loss, yang tidak memberikan penalti  berdasarkan keyakinan prediksi, Cross-Entropy menghukum prediksi yang salah tapi yakin, serta prediksi yang benar tapi kurang percaya diri.

Fungsi Cross-Entropy memiliki variasi yang luas, jenis yang paling umum adalah Binary Cross-Entropy (BCE). BCE Loss terutama digunakan untuk model klasifikasi biner; yaitu, model hanya memiliki 2 kelas. Persamaan matematika dari cross entropy yaitu

   

Cara menggunakan log likelihood in python

Kapan itu bisa digunakan?

  • Tugas klasifikasi biner, yang merupakan fungsi kerugian default di Pytorch.
  • Membuat model yang percaya diri—prediksi akan akurat dan dengan probabilitas yang lebih tinggi.

Copy Code Copied! Use a different Browser


import torch
import torch.nn as nn

input = torch.randn(3, 5, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)

cross_entropy_loss = nn.CrossEntropyLoss()
output = cross_entropy_loss(input, target)
output.backward()

print(‘input: ‘, input)
print(‘target: ‘, target)
print(‘output: ‘, output)

Cara menggunakannya

Kalian bisa melihat Cara menggunakan loss function Cross-entropy loss

 

ref: https://github.com/christianversloot/machine-learning-articles/blob/main/how-to-use-pytorch-loss-functions.md