Model Linier untuk Klasifikasi, Regresi Logistik, dengan&tanpa perpustakaan sklearn – Menuju AI — Teknologi, Sains, dan Rekayasa Terbaik

Pengarang: Ibrahim Kovan

Pembelajaran mesin

Artikel ini secara deduktif memecah topik regresi logistik, yang merupakan model linier untuk klasifikasi. Ini menjelaskan bagaimana algoritma Regresi Logistik bekerja secara matematis, bagaimana penerapannya dengan pustaka sklearn, dan terakhir bagaimana penerapannya di python dengan persamaan matematika tanpa pustaka sklearn. Selanjutnya dijelaskan klasifikasi multiclass untuk model linier.

Daftar Isi (TOC)
—- Pengantar
—- Model Linier untuk Klasifikasi tanpa Sklearn
—- Model Linier untuk Klasifikasi dengan Sklearn
—– Model Linier untuk Klasifikasi Multiclass
Foto oleh Roberto Sorin di Unsplash

pengantar

Model linier digunakan untuk klasifikasi serta regresi. Salah satunya, Regresi Logistik, digunakan untuk klasifikasi biner yang bertentangan dengan namanya. Klasifikasi biner berarti bahwa dataset mencakup 2 output (kelas). Selain itu, Regresi Logistik adalah bagian mendasar dari Neural Networks. Ini bekerja untuk meminimalkan kesalahan (biaya) di setiap iterasi dengan memperbarui nilai awal yang ditetapkan oleh pengguna. Gambar 1 menunjukkan flowchart bagaimana dataset dengan 4 fitur dan 2 kelas diklasifikasikan dengan regresi logistik.

Gambar 1. Diagram Alir Regresi Logistik Gambar oleh penulis Pada bagian pelatihan regresi logistik, 1 bobot diberikan untuk setiap fitur dan 1 nilai bias ditambahkan ke sistem. Bobot dan nilai bias ini diinisialisasi dengan nilai yang dipilih oleh pengguna. Setiap bobot dikalikan dengan nilai fitur sendiri dan ditambahkan dengan menambahkan nilai bias. Fungsi aktivasi (gambar 2) yang dipilih oleh pengguna diterapkan ke nilai penjumlahan. Ketika kita berasumsi bahwa itu adalah fungsi sigmoid, Fungsi Aktivasi (jumlah) akan menjadi antara 0-1 dan kesalahan dihitung dengan nilai ini. Menurut nilai kesalahan yang dihitung, bobot dan nilai bias diperbarui dengan penurunan gradien (klik di sini) pada tingkat kecepatan pembelajaran. Proses ini diulang sebanyak jumlah iterasi. Sekarang, mari kita terapkan proses yang disebutkan di atas pada dataset kanker payudara dengan kode.

Gambar 2. Fungsi Aktivasi, sumber

Model Linier untuk Klasifikasi tanpa perpustakaan Sklearn

Dataset diimpor dan nilai fitur dinormalisasi dengan MinMaxScaler dan data dipisahkan dengan train_test_split.

DI DALAM[1]
impor numpy sebagai np
impor panda sebagai pd
impor matplotlib.pyplot sebagai plt
dari sklearn.datasets impor load_breast_cancer
data = beban_payudara_kanker()
x=data.data
y=data.target
print(“bentuk data :”,x.bentuk)
dari sklearn.preprocessing impor MinMaxScaler
scaler=MinMaxScaler()
x_new=scaler.fit_transform(x)
KELUAR[1]
bentuk data: (569, 30) IN[2]
dari sklearn.model_selection impor train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_new,y,test_size = 0,15,random_state=2021)
x_train = x_train.T
x_test = x_test.T
y_train = y_train.T
y_test = y_test.T

Nilai awal ditetapkan sebagai bobot 0,1 dan bias awal adalah 1. Persamaan fungsi sigmoid diterapkan.

DI DALAM[3]
def weights_bias(bentuk):
bobot = np.penuh((bentuk,1),0.1)
bias = 1
bobot kembali, bias
DI DALAM[4]
def sigmoid(z):
y_predict = 1/(1+ np.exp(-z))
kembali y_predict

Propagasi maju dan propagasi mundur dirancang sebagai berikut.

DI DALAM[5]
def forward_backward(w,b,x_train,y_train):
z = np.dot(wT,x_train) + b
y_prediksi = sigmoid(z)
turunan_berat = (np.dot(x_train,((y_predict-y_train).T)))/x_train.shape[1]
turunan_bias = np.sum(y_predict-y_train)/x_train.shape[1]
gradien = {“bobot_turunan”: bobot_turunan, “bias_turunan”: turunan_bias}
kembali gradien

Nilai awal telah memperbarui laju pembelajaran dan jumlah waktu iterasi.

DI DALAM[6]
def update_parameters(w, b, x_train, y_train, learning_rate, iterasi):
indeks = []
untuk saya dalam rentang (iterasi):
gradien = maju_mundur(w,b,x_train,y_train)
w = w – learning_rate * gradien[“derivative_weight”]
b = b – learning_rate * gradien[“derivative_bias”]
parameter = {“berat”: w,”bias”: b}
mengembalikan parameter, gradien

Langkah terakhir dari arsitektur adalah untuk memprediksi input saat ini dan jika fungsi sigmoid (jumlah) 0,5, itu milik kelas 0, dan jika fungsi sigmoid (jumlah)> 0,5, itu milik kelas 1.

DI DALAM[7]
def prediksi(w,b,x_test):
z = sigmoid(np.dot(wT,x_test)+b)
y_prediksi = np.zeros((1,x_test.shape[1]))
untuk saya dalam jangkauan (z.shape[1]):
jika z[0,i]<= 0,5:
y_prediksi[0,i] = 0
lain:
y_prediksi[0,i] = 1
kembalikan prediksi_y

Sekarang mari gabungkan semuanya dan uji dengan Learning_rate=0.1 dan jumlah iterasi=100:

DI DALAM[8]
def logistic_regression(x_train, y_train, x_test, y_test, learning_rate , iterasi):
bentuk = x_train.shape[0]
w,b = bobot_bias(bentuk)
parameter, gradien = update_parameters(w, b, x_train, y_train, learning_rate, iterasi)
y_prediction_test = prediksi(parameter[“weight”],parameter[“bias”],x_test)
print(“uji akurasi: {}% “.format(100 – np.mean(np.abs(y_prediction_test – y_test)) * 100))

logistik_regresi(x_train, y_train, x_test, y_test, learning_rate = 0,1, iterasi = 100)
KELUAR[8]
akurasi tes: 91.86046511627907%

Nilai awal, kecepatan pembelajaran, jumlah iterasi adalah hyperparameter proyek. Konfigurasi lain dapat dicoba dan akurasi yang lebih tinggi dapat diperoleh.

Model Linier untuk Klasifikasi dengan perpustakaan Sklearn

Sekarang mari kita bekerja pada dataset yang sama menggunakan library sklearn. Ketika kita mengubah nilai hyperparameter C, efeknya pada akurasi model terlihat.

DI DALAM[9]
dari sklearn.linear_model impor LogisticRegression
c_list=[0.001,0.01,0.1,1,10]
untuk saya di c_list:
lrc = LogisticRegression(C=i).fit(x_train.T,y_train.T)
lrc_test=lrc.score(x_test.T,y_test.T)
lrc_test=putaran(lrc_test*100,2)
print(“C=”,i,”tes acc: “, lrc_test,”%”)
KELUAR[9]
C= 0,001 tes acc: 63,95 %
C= 0,01 tes acc: 77,91 %
C= 0,1 tes acc: 93,02 %
C= 1 tes acc: 95,35%
C= 10 tes acc: 98,84 %

Seperti yang terlihat bahwa, ketika nilai Kontrol C meningkat, akurasi pengujian juga meningkat. Ada banyak hyperparameter untuk regresi logistik di Sklearn dan semuanya dapat diakses dengan mengklik link ini.

Klasifikasi Multikelas

Disebutkan bahwa Regresi Logistik digunakan untuk klasifikasi biner. Jadi bagaimana kita bisa menggunakan regresi logistik jika ada lebih dari 2 kelas? Di sini, kita menemukan klasifikasi multiclass berdasarkan prinsip satu vs istirahat. Untuk setiap kelas, koefisien dan bias dihasilkan dengan mengambil semua kelas lain melawannya. Pada fase prediksi ditempatkan pada kelas yang paling sesuai. Dengan library Sklearn, kita dapat dengan mudah mengimplementasikannya seperti yang terlihat di bawah ini.

DI DALAM[10]
dari sklearn.datasets impor load_digits
digit = load_digits()
x_digit=angka.data
y_digit=digit.target
print(“bentuk data:”,x_digit.shape) dari sklearn.preprocessing impor MinMaxScaler
scaler=MinMaxScaler()
x_digit_new=scaler.fit_transform(x_digit) dari sklearn.model_selection impor train_test_split
x_digit_train, x_digit_test, y_digit_train, y_digit_test = train_test_split(x_digit_new,y_digit,test_size = 0,20,random_state=2021)
KELUAR[10]
bentuk data: (1797, 64) IN[11]
dari sklearn.linear_model impor LogisticRegression
multiclass = LogisticRegression(multi_class=’multinomial’)
multiclass.fit(x_digit_train,y_digit_train)
multiclass_test=multiclass.score(x_digit_test,y_digit_test)
multiclass_test=putaran(multiclass_test*100,2)
print(“tes acc: “, multiclass_test,”%”)
KELUAR[11]
uji acc: 95,28%

Kembali ke panduan klik di sini.

Pedoman Pembelajaran Mesin

Model Linier untuk Klasifikasi, Regresi Logistik, dengan&tanpa perpustakaan sklearn awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI