Secara umum, regresi
logistik biner menggambarkan hubungan antara variabel dependen biner dan satu
atau lebih variabel independen.
Variabel dependen biner
memiliki dua hasil yang mungkin:
·
‘1’
untuk benar / sukses; atau
·
‘0’
untuk false / kegagalan
Sekarang mari kita lihat
bagaimana menerapkan regresi logistik di Python menggunakan contoh praktis.
Langkah-langkah
untuk Menerapkan Regresi Logistik dengan Python
Langkah 1: Kumpulkan data Anda
Untuk memulai dengan
contoh sederhana, katakanlah tujuan Anda adalah untuk membangun model regresi
logistik dengan Python untuk menentukan apakah kandidat akan diterima di
universitas bergengsi.
Di sini, ada dua hasil
yang mungkin: Diterima (diwakili oleh nilai '1') vs Ditolak
(diwakili oleh nilai '0').
Anda kemudian membangun
regresi logistik dengan Python, di mana:
·
Variabel
dependen menunjukkan apakah seseorang diterima
·
3
variabel independen adalah skor GMAT, IPK dan Tahun pengalaman kerja
Berikut tampilan dataset-nya:
Perhatikan bahwa dataset di atas berisi 40 pengamatan. Dalam praktiknya, Anda akan membutuhkan ukuran sampel yang lebih besar untuk mendapatkan hasil yang lebih akurat.
Langkah
2: Impor paket Python yang dibutuhkan
Sebelum Anda mulai,
pastikan bahwa paket-paket berikut ini diinstal dengan Python:
·
pandas - digunakan untuk membuat DataFrame
untuk menangkap dataset dengan Python
·
sklearn - digunakan untuk membangun model
regresi logistik dengan Python
·
seaborn - digunakan untuk membuat Confusion
Matrix
·
matplotlib - digunakan untuk menampilkan grafik
Kemudian impor semua paket
yang dibutuhkan, sebagai berikut:
import pandas as pd
from sklearn.model_selection
import train_test_split
from sklearn.linear_model
import LogisticRegression
from sklearn import metrics
import seaborn as sn
import matplotlib.pyplot as plt
Langkah
3: Bangun Dataframe
Untuk langkah ini, Anda
harus menangkap dataset (dari langkah 1) dengan Python. Anda dapat
menyelesaikan tugas ini menggunakan panda Dataframe:
import pandas as pd
candidates = {
'gmat': [780, 750, 690, 710,
680, 730, 690, 720, 740, 690, 610, 690, 710, 680, 770, 610, 580, 650, 540, 590,
620, 600, 550, 550, 570, 670, 660, 580, 650, 660, 640, 620, 660, 660, 680, 650,
670, 580, 590, 690],
'gpa': [4, 3.9, 3.3, 3.7, 3.9,
3.7, 2.3, 3.3, 3.3, 1.7, 2.7, 3.7, 3.7, 3.3, 3.3, 3, 2.7, 3.7, 2.7, 2.3, 3.3,
2, 2.3, 2.7, 3, 3.3, 3.7, 2.3, 3.7, 3.3, 3, 2.7, 4, 3.3, 3.3, 2.3, 2.7, 3.3,
1.7, 3.7],
'work_experience': [3, 4, 3, 5,
4, 6, 1, 4, 5, 1, 3, 5, 6, 4, 3, 1, 4, 6, 2, 3, 2, 1, 4, 1, 2, 6, 4, 2, 6, 5,
1, 2, 4, 6, 5, 1, 2, 1, 4, 5],
'admitted': [1, 1, 0, 1, 0, 1,
0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0,
1, 1, 1, 0, 0, 0, 0, 1]
}
df = pd.DataFrame(candidates,
columns = ['gmat', 'gpa', 'work_experience', 'admitted'])
print (df)
gmat gpa work_experience admitted
0 780 4.0 3 1
1 750 3.9 4 1
2 690 3.3 3 0
3 710 3.7 5 1
4 680 3.9 4 0
5 730 3.7 6 1
6 690 2.3 1 0
7 720 3.3 4 1
8 740 3.3 5 1
9 690 1.7 1 0
10 610 2.7 3 0
11 690 3.7 5 1
12 710 3.7 6 1
13 680 3.3 4 0
14 770 3.3 3 1
15 610 3.0 1 0
16 580 2.7 4 0
17 650 3.7 6 1
18 540 2.7 2 0
19 590 2.3 3 0
20 620 3.3 2 1
21 600 2.0 1 0
22 550 2.3 4 0
23 550 2.7 1 0
24 570 3.0 2 0
25 670 3.3 6 1
26 660 3.7 4 1
27 580 2.3 2 0
28 650 3.7 6 1
29 660 3.3 5 1
30 640 3.0 1 0
31 620 2.7 2 0
32 660 4.0 4 1
33 660 3.3 6 1
34 680 3.3 5 1
35 650 2.3 1 0
36 670 2.7 2 0
37 580 3.3 1 0
38 590 1.7 4 0
39 690 3.7 5 1
Atau, Anda bisa mengimpor
data ke Python dari file eksternal.
Langkah
4: Buat regresi logistik dengan Python
Sekarang, atur variabel
independen (direpresentasikan sebagai X) dan variabel dependen
(direpresentasikan sebagai y):
X =
df[['gmat', 'gpa','work_experience']]
y =
df['admitted']
Lalu, terapkan train_test_split. Misalnya, Anda dapat mengatur ukuran
tes ke 0,25, dan karena itu pengujian model akan didasarkan pada 25%
dari dataset, sedangkan pelatihan model akan didasarkan pada 75% dari dataset:
X_train,
X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state
= 0)
Terapkan regresi logistik
sebagai berikut:
logistic_regression
= LogisticRegression(solver='liblinear')
logistic_regression.fit(X_train,
y_train)
y_pred =
logistic_regression.predict(X_test)
Kemudian, gunakan kode di
bawah ini untuk mendapatkan Confusion Matrix:
confusion_matrix
= pd.crosstab(y_test, y_pred, rownames=['Actual'], colnames=['Predicted'])
sn.heatmap(confusion_matrix,
annot=True)
Untuk bagian terakhir,
cetak Akurasi dan plot Confusion Matrix:
print('Accuracy:
', metrics.accuracy_score(y_test, y_pred))
plt.show()
Menyatukan semua komponen
kode:
import pandas as pd
from sklearn.model_selection
import train_test_split
from sklearn.linear_model
import LogisticRegression
from sklearn import metrics
import seaborn as sn
import matplotlib.pyplot as plt
candidates = {
'gmat':[780,750,690,710,680,730,690,720,740,690,610,690,710,680,770,610,580,650,540,590,620,600,550,550,570,670,660,580,650,660,640,620,660,660,680,650,670,580,590,690],
'gpa':[4,3.9,3.3,3.7,3.9,3.7,2.3,3.3,3.3,1.7,2.7,3.7,3.7,3.3,3.3,3,2.7,3.7,2.7,2.3,3.3,2,2.3,2.7,3,3.3,3.7,2.3,3.7,3.3,3,2.7,4,3.3,3.3,2.3,2.7,3.3,1.7,3.7],
'work_experience':[3,4,3,5,4,6,1,4,5,1,3,5,6,4,3,1,4,6,2,3,2,1,4,1,2,6,4,2,6,5,1,2,4,6,5,1,2,1,4,5],
'admitted':[1,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1]
}
df = pd.DataFrame(candidates,columns=
['gmat', 'gpa','work_experience','admitted'])
#print (df)
X = df[['gmat',
'gpa','work_experience']]
y = df['admitted']
X_train,X_test,y_train,y_test =
train_test_split(X,y,test_size=0.25,random_state=0)
logistic_regression=
LogisticRegression(solver='liblinear')
logistic_regression.fit(X_train,y_train)
y_pred=logistic_regression.predict(X_test)
confusion_matrix =
pd.crosstab(y_test, y_pred, rownames=['Actual'], colnames=['Predicted'])
sn.heatmap(confusion_matrix,
annot=True)
print('Accuracy:
',metrics.accuracy_score(y_test, y_pred))
plt.show()
Seperti yang dapat diamati dari matriks:
·
TP
= True Positive = 4
·
TN
= Benar Negatif = 3
·
FP
= Positif Salah = 2
·
FN
= Negatif Salah =1
Anda bisa mendapatkan
Akurasi menggunakan:
Akurasi = (TP + TN) /
Total = 4 +3) / 10 = 0,7
Oleh karena itu akurasi
adalah 70% untuk set tes.
Menyelam
Lebih Dalam ke Hasil
Sekarang mari kita cetak
dua komponen dalam kode python:
print(X_test)
print(y_pred)
Berikut adalah kode yang
digunakan:
import pandas as pd
from sklearn.model_selection
import train_test_split
from sklearn.linear_model
import LogisticRegression
candidates = {
'gmat':
[780,750,690,710,680,730,690,720,740,690,610,690,710,680,770,610,580,650,540,590,620,600,550,550,570,670,660,580,650,660,640,620,660,660,680,650,670,580,590,690],
'gpa':
[4,3.9,3.3,3.7,3.9,3.7,2.3,3.3,3.3,1.7,2.7,3.7,3.7,3.3,3.3,3,2.7,3.7,2.7,2.3,3.3,2,2.3,2.7,3,3.3,3.7,2.3,3.7,3.3,3,2.7,4,3.3,3.3,2.3,2.7,3.3,1.7,3.7],
'work_experience':
[3,4,3,5,4,6,1,4,5,1,3,5,6,4,3,1,4,6,2,3,2,1,4,1,2,6,4,2,6,5,1,2,4,6,5,1,2,1,4,5],
'admitted':
[1,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1]
}
df =
pd.DataFrame(candidates,columns= ['gmat', 'gpa','work_experience','admitted'])
X = df[['gmat',
'gpa','work_experience']]
y = df['admitted']
X_train,X_test,y_train,y_test =
train_test_split(X,y,test_size=0.25,random_state=0) #train is based on 75% of the dataset, test
is based on 25% of dataset
logistic_regression=
LogisticRegression(solver='liblinear')
logistic_regression.fit(X_train,y_train)
y_pred=logistic_regression.predict(X_test)
print (X_test) #test dataset
print (y_pred) #predicted
values
Ingat bahwa dataset asli (dari
langkah 1) memiliki 40 pengamatan. Karena kita menetapkan ukuran pengujian ke
0,25, maka confusion matrix menampilkan hasil untuk 10 baris (= 40 * 0,25). Berikut
ini adalah 10 baris uji:
gmat gpa
work_experience
22 550 2.3 4
20 620 3.3 2
25 670 3.3 6
4 680 3.9 4
10 610 2.7 3
15 610 3.0 1
28 650 3.7 6
11 690 3.7 5
18 540 2.7 2
29 660 3.3 5
Prediksi ini juga dibuat
untuk 10 record tersebut (dimana 1 = diterima, sedangkan 0 = ditolak):
[1 0 1 1 0 0 1 1 0 1]
Index dan Dataset adalah sebagai berikut:
index
|
gmat
|
gpa
|
work_experience
|
admitted
|
0
|
1
|
|||
1
|
1
|
|||
2
|
0
|
|||
3
|
1
|
|||
4
|
0
|
|||
5
|
1
|
|||
6
|
0
|
|||
7
|
1
|
|||
8
|
1
|
|||
9
|
0
|
|||
10
|
0
|
|||
11
|
1
|
|||
12
|
1
|
|||
13
|
0
|
|||
14
|
1
|
|||
15
|
0
|
|||
16
|
0
|
|||
17
|
1
|
|||
18
|
0
|
|||
19
|
0
|
|||
20
|
1
|
|||
21
|
0
|
|||
22
|
0
|
|||
23
|
0
|
|||
24
|
0
|
|||
25
|
1
|
|||
26
|
1
|
|||
27
|
0
|
|||
28
|
1
|
|||
29
|
1
|
|||
30
|
0
|
|||
31
|
0
|
|||
32
|
1
|
|||
33
|
1
|
|||
34
|
1
|
|||
35
|
0
|
|||
36
|
0
|
|||
37
|
0
|
|||
38
|
0
|
|||
39
|
1
|
Dalam dataset aktual (dari
langkah-1), Anda akan melihat bahwa untuk data pengujian, kita mendapatkan
hasil yang benar 8 dari 10 kali:
index
|
gmat
|
gpa
|
work_experience
|
admitted – actual result
|
admidtted – predicted result
|
matching
|
22
|
550
|
2.3
|
4
|
0
|
1
|
FALSE
|
20
|
620
|
3.3
|
2
|
1
|
0
|
FALSE
|
25
|
670
|
3.3
|
6
|
1
|
1
|
TRUE
|
4
|
680
|
3.9
|
4
|
0
|
1
|
FALSE
|
10
|
610
|
2.7
|
3
|
0
|
0
|
TRUE
|
15
|
610
|
3.0
|
1
|
0
|
0
|
TRUE
|
28
|
650
|
3.7
|
6
|
1
|
1
|
TRUE
|
11
|
690
|
3.7
|
5
|
1
|
1
|
TRUE
|
18
|
540
|
2.7
|
2
|
0
|
0
|
TRUE
|
29
|
660
|
3.3
|
5
|
1
|
1
|
TRUE
|
Ini cocok dengan tingkat
akurasi 70% (=7/10*100)
Memeriksa
Prediksi untuk Set Data Baru
Katakanlah Anda memiliki
kumpulan data baru, dengan 5 kandidat baru:
gmat
|
gpa
|
work_experience
|
590
|
2
|
3
|
740
|
3.7
|
4
|
680
|
3.3
|
6
|
610
|
2.3
|
1
|
710
|
3
|
5
|
Tujuan Anda adalah menggunakan model regresi logistik yang ada untuk memprediksi apakah kandidat baru akan diterima.
Set data baru kemudian
dapat ditangkap dalam DataFrame kedua bernama df2:
new_candidates = {'gmat':
[590,740,680,610,710],
'gpa': [2,3.7,3.3,2.3,3],
'work_experience':
[3,4,6,1,5]
}
df2 =
pd.DataFrame(new_candidates,columns= ['gmat', 'gpa','work_experience'])
Dan di sini adalah kode
lengkap untuk mendapatkan prediksi 5 kandidat baru:
import pandas as pd
from sklearn.model_selection
import train_test_split
from sklearn.linear_model
import LogisticRegression
candidates = {'gmat':
[780,750,690,710,680,730,690,720,740,690,610,690,710,680,770,610,580,650,540,590,620,600,550,550,570,670,660,580,650,660,640,620,660,660,680,650,670,580,590,690],
'gpa':
[4,3.9,3.3,3.7,3.9,3.7,2.3,3.3,3.3,1.7,2.7,3.7,3.7,3.3,3.3,3,2.7,3.7,2.7,2.3,3.3,2,2.3,2.7,3,3.3,3.7,2.3,3.7,3.3,3,2.7,4,3.3,3.3,2.3,2.7,3.3,1.7,3.7],
'work_experience':
[3,4,3,5,4,6,1,4,5,1,3,5,6,4,3,1,4,6,2,3,2,1,4,1,2,6,4,2,6,5,1,2,4,6,5,1,2,1,4,5],
'admitted': [1,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1]
}
df =
pd.DataFrame(candidates,columns= ['gmat', 'gpa','work_experience','admitted'])
X = df[['gmat',
'gpa','work_experience']]
y = df['admitted']
X_train,X_test,y_train,y_test =
train_test_split(X,y,test_size=0.25,random_state=0) #in this case, you may choose to set the
test_size=0. You should get the same prediction here
logistic_regression=
LogisticRegression(solver='liblinear')
logistic_regression.fit(X_train,y_train)
new_candidates = {'gmat':
[590,740,680,610,710],
'gpa': [2,3.7,3.3,2.3,3],
'work_experience':
[3,4,6,1,5]
}
df2 =
pd.DataFrame(new_candidates,columns= ['gmat', 'gpa','work_experience'])
y_pred=logistic_regression.predict(df2)
print (df2)
print (y_pred)
Jalankan kode programnya,
dan akan didapatkan prediksi berikut:
gmat gpa work_experience
0 590 2.0 3
1 740 3.7 4
2 680 3.3 6
3 610 2.3 1
4 710 3.0 5
[0 1 1 0 1]
Kandidat pertama dan
keempat tidak diharapkan untuk diterima, sementara kandidat lainnya diharapkan
untuk diterima.
--------------------------Source dapat di download di sini => https://drive.google.com/file/d/1da9XmA1VTqiUc46paiFMR70fRKhbo35g/view?usp=sharing
Materi: https://drive.google.com/open?id=17Z_1xXXGuWiC0VXrnNtuxLzz4jJGqciz
Logistic , Regresi Logistik , Regression
No comments:
Post a Comment