Monday, November 20, 2023

Dua Gambar Bersisian Pada LaTeX

 %--------DUA GAMBAR BERSISIAN

\begin{figure}
  \begin{minipage}{0.4\textwidth}
    \centering
    \includegraphics[width=\linewidth]{topologi-1-2023.drawio.png}
    \caption{Topologi Mesh 1 singgle Hop}
    \label{fig:topologi1}
  \end{minipage}%
  \begin{minipage}{0.5\textwidth}
    \centering
    \includegraphics[width=\linewidth]{topologi-2-2023.drawio.png}
    \caption{topologi 2 multiHop}
    \label{fig:topologi2}
  \end{minipage}
\end{figure}




Monday, October 30, 2023

Problem Set 2.5 Chain Rule Aplications

 


69. Sebuah roda berpusat dititik asal dan berjari-jari 10cm, berputar search jarum jam dengan laju 4 putaran/detik. Sebuah titik P burada pada roda di (10,0) saat t = 0

(A) Tentukan koordinat P pada saat t detik

(B) pada laju berapa P naik (atau turun) pada saat t=1


Jawab


💥(a) Untuk menentukan Koordinat P pada t detik perlu ditentukan sudut $ \theta $ pada waktu t detik.


- Karna roda berputar dengan laju 4 putaran/detik. 1 putaran = $ 2\pi ~radian $ 

maka kecepatan sudut $ \omega $ adalah :

$ \omega~=~ 4 \times 2\pi~=~ 8\pi~radian $


- Menentukan $ \theta $ pada waktu t :$~~ \theta=\omega t=8\pi t $


- Dari phitagoras : $ x = r\, cos\, \theta,~~ y = r \, sin\, \theta $


$ x(t)= r \, cos \theta $

$ ~~~~~~~= 10 ~cos 8\pi t $

  
$ y(t)= r \, sin \theta $ 
$ ~~~~~~~= 10\,sin \,8\pi t $

maka koordinat P saat t $(x,y)_t $ adalah $ (10 cos 8 \pi t, 10 sin 8 \pi t) $

💥(B) menentukan  laju dimana P naik atau turun pada $ t = 1 $, maka perlu diturunkan $ y $ terhadap $ t$ 

$ y(t) = 10 \, sin \, 8 \pi t $

$ \frac{dy(t)}{dt} = 10 \frac{d}{dt} sin\, 8\pi t + sin\, 8\pi t \frac{d}{dt}10 $ 

$ V_{(t)}~=~\frac{dy}{dt} = 80\pi \, cos \, 8\pi t $

$ V_{(t)} =  $ saat   $t =1$

$ V_{(t)} = 80\pi \, cos \, ( 8\pi 1)  $

$~~~~~~~= 80\pi \, cos\, 8\pi ~=~ 80\pi \, cm/t $ 

============================================================= 












Sunday, June 4, 2023

VLAN

 


file : Gdrive

Switch(config)#hostname S1
S1(config)#vlan 10
S1(config-vlan)#name student
S1(config-vlan)#exit
S1(config)#vlan 20
S1(config-vlan)#name admin
S1(config-vlan)#end
S1#copy running-config startup-config
S1#

S1(config)#interface range fa0/1-fa0/9
S1(config-if-range)#switchport mode access
S1(config-if-range)#switchport access vlan 10
S1(config-if-range)#exit
 
S1(config)#interface range fa0/10-fa0/15
S1(config-if-range)#switchport mode access
S1(config-if-range)#switchport access vlan 20
S1(config-if-range)#end
S1#copy running-config startup-config

S1#sh vlan
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/16, Fa0/17, Fa0/18, Fa0/19
                                                Fa0/20, Fa0/21, Fa0/22, Fa0/23
                                                Fa0/24, Gig0/1, Gig0/2
10   student                          active    Fa0/1, Fa0/2, Fa0/3, Fa0/4
                                                Fa0/5, Fa0/6, Fa0/7, Fa0/8
                                                Fa0/9
20   admin                            active    Fa0/10, Fa0/11, Fa0/12, Fa0/13
                                                Fa0/14, Fa0/15

S1(config)#
S1(config)#int Gig0/1
S1(config-if)#switchport mode trunk
S1(config-if)#switchport trunk allowed vlan all
S1(config-if)#end
S1#copy running-config startup-config 

-----


Switch(config)#hostname S2
S2(config)#vlan 10
S2(config-vlan)#name student
S2(config-vlan)#exit
S2(config)#vlan 20
S2(config-vlan)#name admin
S2(config-vlan)#end
S2#copy running-config startup-config


S2(config)#interface range fa0/1-fa0/9
S2(config-if-range)#switchport mode access
S2(config-if-range)#switchport access vlan 10
S2(config-if-range)#exit


S2(config)#interface range fa0/10-fa0/15
S2(config-if-range)#switchport mode access
S2(config-if-range)#switchport access vlan 20
S2(config-if-range)#end
S2#copy running-config startup-config

S2#sh vlan
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------

1    default                          active    Fa0/16, Fa0/17, Fa0/18, Fa0/19

                                                Fa0/20, Fa0/21, Fa0/22, Fa0/23
                                                Fa0/24, Gig0/1, Gig0/2

10   student                          active    Fa0/1, Fa0/2, Fa0/3, Fa0/4

                                                Fa0/5, Fa0/6, Fa0/7, Fa0/8
                                                Fa0/9
20   admin                            active    Fa0/10, Fa0/11, Fa0/12, Fa0/13
                                                Fa0/14, Fa0/15

Dynamic Routing Dengan OSPF Menggunakan Multi Area

 


file : Gdrive

R0(config)#router ospf 1
R0(config-router)#network 192.168.200.16 0.0.0.15 area 0
R0(config-router)#network 172.2.1.4 0.0.0.3 area 0
R0(config-router)#network 172.2.1.8 0.0.0.3 area 0
R0(config-router)#end

R1(config)#router ospf 1
R1(config-router)#network 172.2.1.4 0.0.0.3 area 0
R1(config-router)#network 172.2.1.16 0.0.0.3 area 1
R1(config-router)#network 192.168.10.0 0.0.0.255 area 1
R1(config-router)#network 172.2.1.12 0.0.0.3 area 0
R1(config-router)#end

R2(config)#router ospf 1
R2(config-router)#network 172.2.1.16 0.0.0.3 area 1
R2(config-router)#network 192.168.20.0 0.0.0.255 area 1
R2(config-router)#end

R3(config)#router ospf 1
R3(config-router)#network 172.2.1.8 0.0.0.3 are
R3(config-router)#network 172.2.1.8 0.0.0.3 area 0
R3(config-router)#network 172.2.1.12 0.0.0.3 area 0
R3(config-router)#network 192.168.30.0 0.0.0.255 area 2
R3(config-router)#network 172.2.1.20 0.0.0.3 area 2
R3(config-router)#end

R4(config)#router ospf 1
R4(config-router)#network 172.2.1.20 0.0.0.3 area 2
R4(config-router)#network 192.168.40.0 0.0.0.255 area 2
R4(config-router)#end

R1#sh ip route 
     172.2.0.0/30 is subnetted, 5 subnets
C       172.2.1.4 is directly connected, Serial2/0
O       172.2.1.8 [110/128] via 172.2.1.5, 00:14:02, Serial2/0
C       172.2.1.12 is directly connected, FastEthernet0/0
C       172.2.1.16 is directly connected, Serial3/0
O IA    172.2.1.20 [110/192] via 172.2.1.5, 00:03:04, Serial2/0
C    192.168.10.0/24 is directly connected, FastEthernet1/0
O    192.168.20.0/24 [110/65] via 172.2.1.18, 00:07:52, Serial3/0
O IA 192.168.30.0/24 [110/129] via 172.2.1.5, 00:03:33, Serial2/0
O IA 192.168.40.0/24 [110/193] via 172.2.1.5, 00:00:46, Serial2/0
     192.168.200.0/28 is subnetted, 1 subnets
O       192.168.200.16 [110/65] via 172.2.1.5, 00:14:02, Serial2/0

R0#sh ip route 
     172.2.0.0/30 is subnetted, 5 subnets
C       172.2.1.4 is directly connected, Serial2/0
C       172.2.1.8 is directly connected, Serial3/0
O IA    172.2.1.12 [110/65] via 172.2.1.6, 00:11:41, Serial2/0
                   [110/65] via 172.2.1.10, 00:05:01, Serial3/0
O IA    172.2.1.16 [110/128] via 172.2.1.6, 00:13:31, Serial2/0
O IA    172.2.1.20 [110/128] via 172.2.1.10, 00:03:54, Serial3/0
O IA 192.168.10.0/24 [110/65] via 172.2.1.6, 00:12:54, Serial2/0
O IA 192.168.20.0/24 [110/129] via 172.2.1.6, 00:08:37, Serial2/0
O IA 192.168.30.0/24 [110/65] via 172.2.1.10, 00:04:23, Serial3/0
O IA 192.168.40.0/24 [110/129] via 172.2.1.10, 00:01:36, Serial3/0
     192.168.200.0/28 is subnetted, 1 subnets
C       192.168.200.16 is directly connected, FastEthernet4/0

Sunday, May 21, 2023

Dynamic Routing Dengan OSPF

OSPF adalah sebuah routing protocol standard terbuka yang telah diimplementasikan oleh sejumlah besar vendor jaringan, termasuk Cisco. Jika memiliki banyak router dari berbagai vendor maka salah satu pilihan yang baik adalah ospf.

Ospf bekerja dengan sebuah algoritma Djikstra. Pertama sebuah pohon jalur terpendek (shortest path tree) akan dibangun, dan kemudian routing table akan diisi dengan jalur-jalur terbaik yang dihasilkan dari pohon tersebut. OSPF mendukung multiple route dengan cost (biaya) yang sama ke tujuan yang sama.

ospf seharusnya seharusnya dirancang dengan cara heirarkis, yang pada dasarnya berarti bahwa sebuah internetwork yang besar dapat dipecah menjadi internetwork-internetwork yang lebih kecil. Alasan untuk menerapkan OSPF dalam rancangan hierarkis (topologi) antara lain :

- untuk mengurangi overhead (waktu pemrosesan) routing

- untuk mempercepat convergence

- untuk membatasi ketidakstabilan network di sebuah area

Contoh Rancangan OSPF

gambar di atas menunjukkan sebuah rancangan sederhana khas ospf. Setiap router terhubung ke backbone yang disebut area 0 atau area backbone. OSPF harus memiliki area 0 dan semua router harus terhubung ke area ini jika memungkinkan, tetapi router-router yang menghubungkan area-area lain ke backbone di dalam sebuah AS disebut Area Border Routerss (ABRs). Meskipun demikian, paling sedikit satu interface harus berada di area 0.


= = =

MENGKONFIGURASI OSPF



IP address antar router tidak menerapkan VLSM untuk alokasi IP Address

=========================================
IP ADD RA
==========================================
Router>ena
Router#config t
Router(config)#hostname RA
RA(config)#int gigabitEthernet 0/0
RA(config-if)#ip address 192.168.20.1 255.255.255.0
RA(config-if)#no sh

RA(config-if)#exit
RA(config)#int gigabitEthernet 0/1
RA(config-if)#ip address 192.168.10.1 255.255.255.0
RA(config-if)#no sh
RA#copy running-config startup-config 

======================================

IP ADD RB

======================================

Router>ena
Router#config t
Router(config)#hostname RB
RB(config)#int gigabitEthernet 0/0
RB(config-if)#ip address 192.168.20.2 255.255.255.0
RB(config-if)#no sh

RB(config-if)#exit
RB(config)#int gigabitEthernet 0/1
RB(config-if)#ip address 192.168.40.1 255.255.255.0
RB(config-if)#no sh
RB(config-if)#exit
RB(config)#int gigabitEthernet 0/2

RB(config-if)#ip address 192.168.30.1 255.255.255.0
RB(config-if)#no sh
RB(config-if)#end
RB#copy running-config startup-config

================================

RC IP Add
===============================
Router>ena
Router#config t
Router(config)#hostname RC
RC(config)#int gigabitEthernet 0/0
RC(config-if)#ip address 192.168.40.2 255.255.255.0
RC(config-if)#no sh
RC(config-if)#exit

RC(config)#int gigabitEthernet 0/1
RC(config-if)#ip address 192.168.50.1 255.255.255.0
RC(config-if)#no shutdown 
RC(config-if)#end
RC#copy running-config startup-config

===================================
OSPF
===================================
RA#config t
RA(config)#router ospf 12
RA(config-router)#network 192.168.10.1 0.0.0.0 area 0
RA(config-router)#network 192.168.20.1 0.0.0.0 area 0
RA(config-router)#end
RA#copy running-config startup-config


RB#config t
RB(config)#router ospf 14
RB(config-router)#network 192.168.0.0 0.0.255.255 area 0
RB(config-router)#end
RB#copy running-config startup-config 

RC#configure terminal 
RC(config)#router ospf 20
RC(config-router)#network 192.168.40.0 0.0.0.255 area 0
RC(config-router)#network 192.168.50.0 0.0.0.255 area 0
RC(config-router)#end
RC#copy running-config startup-config 

===
RA#sh ip route 

     192.168.10.0/24 is variably subnetted, 2 subnets, 2 masks
C       192.168.10.0/24 is directly connected, GigabitEthernet0/1
L       192.168.10.1/32 is directly connected, GigabitEthernet0/1
     192.168.20.0/24 is variably subnetted, 2 subnets, 2 masks
C       192.168.20.0/24 is directly connected, GigabitEthernet0/0
L       192.168.20.1/32 is directly connected, GigabitEthernet0/0
O    192.168.30.0/24 [110/2] via 192.168.20.2, 00:03:55, GigabitEthernet0/0
O    192.168.40.0/24 [110/2] via 192.168.20.2, 00:03:55, GigabitEthernet0/0
O    192.168.50.0/24 [110/3] via 192.168.20.2, 00:02:52, GigabitEthernet0/0

Saturday, May 20, 2023

5.1 Integral - Luas Area

Sumber : Calculus (9rd Edition) Dale Varberg, Edwin Purcell

Chapter 5.1
































ada bagian salah tanda +- pada :
$ (-x^2 - x - 2) $ seharusnya $ (-x^2 - x + 2 ) $

bagian lainnya sudah benar

Friday, May 19, 2023

5.4 Thomas Integral

 Beberapa contoh penyelesaian soal-soal Kalkulus

Sumber : Thomas Calculus

Ch : 5.4








Simulasi Static Routing dengan Packet Tracert

 

R2

======

Fa1/0  192.168.30.1 /24

Fa0/0 192.168.1.6/ 30

Se3/0 192.168.1.14 /30

R0

=======

Fa1/0  192.168.10.1 /24

Fa0/0  192.168.1.5 /30

Se2/0  192.168.1.9 /30

PC0    192.168.10.2 /24

R1

=======

Fa1/0  192.168.20.1 /24

Se2/0  192.168.1.10 /30

Se3/0  192.168.1.13 /30


R0

=====

Router>enable 

Router#configure terminal 

Router(config)#hostname R0


R0(config)#interface fa1/0

R0(config-if)#ip address 192.168.10.1 255.255.255.0

R0(config-if)#no shutdown 


R0(config-if)#exit

R0(config)#interface fa0/0

R0(config-if)#ip address 192.168.1.5 255.255.255.252

R0(config-if)#no shutdown 


R0(config)#interface se2/0

R0(config-if)#ip address 192.168.1.9 255.255.255.252

R0(config-if)#no shutdown 

R0(config-if)#end


R0#copy running-config startup-config 

Destination filename [startup-config]? 

Building configuration...


R1

=====

Router>enable 

Router#configure terminal 

Router(config)#hostname R1


R1(config)#interface fa1/0

R1(config-if)#ip address 192.168.20.1 255.255.255.0

R1(config-if)#no shutdown 

R1(config-if)#exit


R1(config)#interface se2/0

R1(config-if)#ip address 192.168.1.10 255.255.255.252

R1(config-if)#no shutdown 

R1(config-if)#exit


R1(config)#interface se3/0

R1(config-if)#ip address 192.168.1.13 255.255.255.252

R1(config-if)#no shutdown 

R1(config-if)#exit

R1(config)#end


R1#copy running-config startup-config 


R2

=============

Router>enable 

Router#configure terminal 

Router(config)#hostname R2


R2(config)#interface fa1/0

R2(config-if)# ip address 192.168.30.1 255.255.255.0

R2(config-if)#no shutdown 

R2(config-if)#exit


R2(config)#interface fa0/0

R2(config-if)#ip address 192.168.1.6 255.255.255.252

R2(config-if)#no shutdown 

R2(config-if)#exit


R2(config)#interface se3/0

R2(config-if)#ip address 192.168.1.14 255.255.255.252

R2(config-if)#no shutdown 

R2(config-if)#end

R2#copy running-config startup-config 


=========================

Static Routing

=========================

Pada R0, rute menuju network di bawah R2 melalui dua jalur (1 sebagai back up), yaitu melalui 192.168.1.6 dan 192.168.1.10 (R1)

R0>enable 

R0#configure terminal 

R0(config)#ip route 192.168.30.0 255.255.255.0 192.168.1.6

R0(config)#ip route 192.168.30.0 255.255.255.0 192.168.1.10

R0(config)#ip route 192.168.20.0 255.255.255.0 192.168.1.10

R0(config)#ip route 192.168.1.12 255.255.255.252 192.168.1.10

R0(config)#end

R0#copy running-config startup-config 


R1>enable 

R1#configure 

R1(config)#ip route 192.168.10.0 255.255.255.0 192.168.1.9

R1(config)#ip route 192.168.30.0 255.255.255.0 192.168.1.14

R1(config)#end

R1#copy running-config startup-config 


R2#configur

R2(config)#ip route 192.168.10.0 255.255.255.0 192.168.1.13

R2(config)#ip route 192.168.1.8 255.255.255.252 192.168.1.13

R2(config)#ip route 192.168.20.0 255.255.255.0 192.168.1.13

R2(config)#end

R2#copy running-config startup-config 

------

R0#show ip route 

Gateway of last resort is not set

     192.168.1.0/30 is subnetted, 3 subnets

C       192.168.1.4 is directly connected, FastEthernet0/0

C       192.168.1.8 is directly connected, Serial2/0

S       192.168.1.12 [1/0] via 192.168.1.10

C    192.168.10.0/24 is directly connected, FastEthernet1/0

S    192.168.20.0/24 [1/0] via 192.168.1.10

S    192.168.30.0/24 [1/0] via 192.168.1.6

                     [1/0] via 192.168.1.10


R1#show ip route 

     192.168.1.0/30 is subnetted, 2 subnets

C       192.168.1.8 is directly connected, Serial2/0

C       192.168.1.12 is directly connected, Serial3/0

S    192.168.10.0/24 [1/0] via 192.168.1.9

C    192.168.20.0/24 is directly connected, FastEthernet1/0

S    192.168.30.0/24 [1/0] via 192.168.1.14




Monday, May 8, 2023

SVM dan PCA (Principal Component Analisys)

Dataset : https://www.kaggle.com/uciml/pima-indians-diabetes-database

Studi kasus : Klasifikasi Diabetes

jumlah fitur = 8 

  1. Pregnancies: Jumlah kali hamil
  2. Glucose: Konsentrasi glukosa plasma dalam 2 jam saat tes toleransi glukosa oral
  3. BloodPressure: Tekanan darah diastolik (mm Hg)
  4. SkinThickness: Ketebalan lipatan kulit trisep (mm)
  5. Insulin: Insulin serum dalam 2 jam (mu U/ml)
  6. BMI: Indeks massa tubuh (berat dalam kg / (tinggi dalam meter)^2)
  7. DiabetesPedigreeFunction: Nilai fungsi silsilah diabetes
  8. Age: Umur (tahun)
  9. Outcome: Variabel target, 0 untuk tidak menderita diabetes dan 1 untuk menderita diabetes.

PCA berfungsi untuk mereduksi ke 8 fitur tersebut untuk menjadi 2 fitur baru misal PC1 dan PC 2.  Nilai PC1 dan PC2 merupakan kombinasi linear dari seluruh fitur asli pada dataset. Dengan kata lain komponen 1 dan komponen 2 dihasilkan melalui reduksi dimensi dari seluruh fitur pada dataset dengan menggunakan metode PCA. Oleh karena itu, tidak ada fitur spesifik yang ditentukan sebagai komponen 1 atau 2, melainkan merupakan kombinasi linear dari seluruh fitur pada dataset.
 

import pandas as pd

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
import numpy as np
import matplotlib.pyplot as plt

# Load dataset
train_data = pd.read_csv("diabetes-train.csv")
test_data = pd.read_csv("diabetes-test.csv")

# Separate attributes and targets
X_train = train_data.iloc[:, :-1].values
y_train = train_data.iloc[:, -1].values
X_test = test_data.iloc[:, :-1].values
y_test = test_data.iloc[:, -1].values


# Standardize the data
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)


# Apply PCA
pca = PCA(n_components=2)
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)


# Print 2 new features from PCA
#print("New feature 1 (PC1):", X_test[:, 0])
#print("New feature 2 (PC2):", X_test[:, 1])


# Print variance ratio of each component
print(pca.explained_variance_ratio_)


# Train SVM
svm = SVC(kernel='linear', random_state=0)
svm.fit(X_train, y_train)


# Make predictions on the test data
y_pred = svm.predict(X_test)


# Calculate accuracy
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy*100))


# Menghitung confusion matrix
cm = confusion_matrix(y_test, y_pred)


# Menampilkan confusion matrix
print("Confusion matrix:")
print(cm)


# Print coefficients of the hyperplane
print("Coefficients of the hyperplane: ", svm.coef_)


# Plot decision boundary
x_min, x_max = X_test[:, 0].min() - 1, X_test[:, 0].max() + 1
y_min, y_max = X_test[:, 1].min() - 1, X_test[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = svm.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, s=20, edgecolor='k')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('SVM Decision Boundary')
plt.show()


# Print actual and predicted values for each test data point
#print("{:<10} {:<15} {}".format('Index', 'Actual Value', 'Predicted Value'))
#for i in range(len(y_test)):
#    print("{:<10} {:<15} {}".format(i+1, y_test[i], y_pred[i]))


# Save actual and predicted values to txt file
with open('actual_pred.txt''w'as f:
    f.write("{:<10} {:<15} {}\n".format('Index''Actual Value''Predicted Value'))
    for i in range(len(y_test)):
        f.write("{:<10} {:<15} {}\n".format(i+1, y_test[i], y_pred[i]))
print("Actual and predicted values saved to actual_pred.txt file")


# Save 2 new features to excel file
new_features = pd.DataFrame({'New feature 1 (PC1)': X_test[:, 0], 'New feature 2 (PC2)': X_test[:, 1]})
new_features.to_excel('new-features.xlsx', index=False)

Hasil Running Program





Dua Fitur yang Dihasilkan oleh PCA




Penjelasan Program

# Standardize the data
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

- - -
Baris kode scaler = StandardScaler() digunakan untuk membuat objek scaler yang akan digunakan untuk melakukan standardisasi pada data, 

pada baris kode X_train = scaler.fit_transform(X_train), objek scaler digunakan untuk melakukan proses standardisasi pada data latih (X_train). Proses standardisasi ini dilakukan dengan mengubah skala nilai pada setiap fitur sehingga memiliki mean (rerata) 0 dan standar deviasi (simpangan baku) 1. Hal ini bertujuan untuk memastikan bahwa semua fitur memiliki pengaruh yang setara terhadap model yang akan dibangun

Baris kode X_test = scaler.transform(X_test) digunakan untuk melakukan proses standardisasi yang sama pada data uji (X_test) menggunakan objek scaler yang sama dengan yang digunakan pada data latih.

Menuliskan hasil Standarisasi Fitur pada File

import pandas as pd
from sklearn.preprocessing import StandardScaler

# Read data train and test
train_data = pd.read_csv('diabetes-train.csv')
test_data = pd.read_csv('diabetes-test.csv')

# Separate features and target variable
X_train = train_data.iloc[:, :-1].values
y_train = train_data.iloc[:, -1].values
X_test = test_data.iloc[:, :-1].values
y_test = test_data.iloc[:, -1].values

# Standardize the data
scaler = StandardScaler()
X_train_std = scaler.fit_transform(X_train)
X_test_std = scaler.transform(X_test)

# Create standardized dataframes
train_data_std = pd.DataFrame(data=X_train_std, columns=train_data.columns[:-1])
test_data_std = pd.DataFrame(data=X_test_std, columns=test_data.columns[:-1])
train_data_std['Outcome'] = y_train
test_data_std['Outcome'] = y_test

# Save to Excel
with pd.ExcelWriter('diabetes-std.xlsx', engine='xlsxwriter') as writer:
    train_data_std.to_excel(writer, sheet_name='Train', index=False)
    test_data_std.to_excel(writer, sheet_name='Test', index=False)
----
Standarisasi Nilai-Nilai Fitur

# Apply PCA
pca = PCA(n_components=2)
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)

Bars program di atas bertujuan untuk mengimplementasikan PCA (Principal Component Analysis) pada data. PCA adalah salah satu teknik reduksi dimensi yang berguna dalam mengatasi masalah overfitting dan mengurangi kompleksitas model. PCA diaplikasikan pada data latih dan data uji dengan memanggil objek PCA dari library scikit-learn. Argumen n_components diatur menjadi 2 untuk menghasilkan 2 fitur baru yang merupakan kombinasi linier dari fitur asli yang paling signifikan dalam menjelaskan varian data.

Setelah PCA diaplikasikan, fitur-fitur asli pada data latih dan data uji diubah ke dalam representasi fitur-fitur baru yang dihasilkan oleh PCA. Ini dilakukan dengan memanggil metode fit_transform() pada data latih dan transform() pada data uji.

----
Bersambung

Wednesday, April 26, 2023

SVM Studi Kasus Diabetes & Confusion Matrix

Dataset : https://www.kaggle.com/uciml/pima-indians-diabetes-database

Studi kasus : Klasifikasi Diabetes

Dataset yang digunakan adalah Pima Indians Diabetes Database. Dataset ini berisi informasi klinis tentang 768 pasien wanita Pima Indian yang berusia di atas 21 tahun. Dataset ini memiliki 9 kolom, yaitu:

  1. Pregnancies: Jumlah kali hamil
  2. Glucose: Konsentrasi glukosa plasma dalam 2 jam saat tes toleransi glukosa oral
  3. BloodPressure: Tekanan darah diastolik (mm Hg)
  4. SkinThickness: Ketebalan lipatan kulit trisep (mm)
  5. Insulin: Insulin serum dalam 2 jam (mu U/ml)
  6. BMI: Indeks massa tubuh (berat dalam kg / (tinggi dalam meter)^2)
  7. DiabetesPedigreeFunction: Nilai fungsi silsilah diabetes
  8. Age: Umur (tahun)
  9. Outcome: Variabel target, 0 untuk tidak menderita diabetes dan 1 untuk menderita diabetes.

Tujuan dari dataset ini adalah untuk memprediksi apakah seorang pasien wanita Pima Indian akan mengalami diabetes atau tidak berdasarkan informasi klinis yang diberikan.


#SVM diabetes #https://www.kaggle.com/uciml/pima-indians-diabetes-database/download import pandas as pd import numpy as np import requests from io import BytesIO import zipfile from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Download dataset #file_url = "https://www.kaggle.com/uciml/pima-indians-diabetes-database/download" #r = requests.get(file_url) #z = zipfile.ZipFile(BytesIO(r.content)) #z.extractall() # Load dataset dataset = pd.read_csv('diabetes.csv') # Split into features and label X = dataset.drop('Outcome', axis=1) y = dataset['Outcome'] # Split into train and test set X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Create SVM model svm_model = SVC(kernel='linear') # Train SVM model svm_model.fit(X_train, y_train) # Make prediction y_pred = svm_model.predict(X_test) # Calculate accuracy accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) # Print confusion matrix and classification report print('Confusion matrix:\n', confusion_matrix(y_test, y_pred)) print('Classification report:\n', classification_report(y_test, y_pred)) # Display actual and predicted values df_compare = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
print(df_compare.head(10))

Hasil Program :

Accuracy: 0.7532467532467533
Confusion matrix:
[[80 19]
[19 36]]
Classification report:
precision recall f1-score support

0 0.81 0.81 0.81 99 1 0.65 0.65 0.65 55 accuracy 0.75 154 macro avg 0.73 0.73 0.73 154 weighted avg 0.75 0.75 0.75 154 Actual Predicted 668 0 0 324 0 0 624 0 0 690 0 0 473 0 0 204 0 0 97 0 0 336 0 1 568 0 1
148 0 1


CONFUSION MATRIX

Dalam program di atas, confusion matrix dapat dihitung menggunakan fungsi confusion_matrix() yang tersedia dalam scikit-learn. Hasil confusion matrix kemudian ditampilkan dengan menggunakan fungsi print(). Confusion matrix merupakan suatu tabel yang menunjukkan jumlah prediksi yang benar dan yang salah pada setiap kelas target. Confusion matrix memiliki 4 elemen, yaitu True Positive (TP), False Positive (FP), False Negative (FN), dan True Negative (TN). Berikut penjelasan dari setiap elemen tersebut:

  • True Positive (TP) : jumlah data yang benar diprediksi sebagai positif
  • False Positive (FP) : jumlah data yang salah diprediksi sebagai positif
  • False Negative (FN) : jumlah data yang salah diprediksi sebagai negatif
  • True Negative (TN) : jumlah data yang benar diprediksi sebagai negatif
Dalam program di atas, confusion matrix menunjukkan hasil sebagai matriks 2x2, dengan baris pertama menunjukkan kelas "0" (yang negatif) dan baris kedua menunjukkan kelas "1" (yang positif). Oleh karena itu, kita dapat membaca hasil confusion matrix sebagai berikut:

  1. Pada baris pertama, kolom pertama menunjukkan jumlah data yang benar diprediksi sebagai negatif (True Negative, TN) dan kolom kedua menunjukkan jumlah data yang salah diprediksi sebagai positif (False Positive, FP).
  2. Pada baris kedua, kolom pertama menunjukkan jumlah data yang salah diprediksi sebagai negatif (False Negative, FN) dan kolom kedua menunjukkan jumlah data yang benar diprediksi sebagai positif (True Positive, TP).
Dengan mengetahui elemen-elemen dalam confusion matrix, kita dapat menghitung berbagai metrik evaluasi model seperti akurasi, precision, recall, dan F1-score.