Pertemuan 6 - Klasifikasi K-Nearest Neighbor (K-NN) dengan Python | Python Data Mining 2021

แชร์
ฝัง
  • เผยแพร่เมื่อ 18 ต.ค. 2024

ความคิดเห็น • 29

  • @AHMADKELIX
    @AHMADKELIX 2 ปีที่แล้ว +1

    izin belajar pak.trmksh

  • @zevt2597
    @zevt2597 3 ปีที่แล้ว +1

    pak izin bertanya, misalkan data nya itu ada 9 kolom, kolom 1-8 digunakan untuk dataset X nya dan kolom terakhir Y nya. lalu untuk langkah terakhir itu pada ListedColormapnya bagaimana ya?
    saya udah coba tapi sering error, tetapi kalau cuma 2 kolom yang dipakai berhasil.

    • @juntazen
      @juntazen  3 ปีที่แล้ว

      karena plot visualisasi nya 2D jadinya untuk hubungan atribut dengan labelnya hanya untuk 2 atribut saja mas, jadi bisa dibuat bergantian 2 atribut 2 atribut terhadap labelnya.

  • @bafanime7170
    @bafanime7170 3 ปีที่แล้ว

    izin bertanya pak, untuk penentua y=kategori di contoh kasus agar bisa dikatakan jelek/baik gimana ya? karena itu langsung dikatakan saja baik 3 jelek 1, atau seperti di kasus dua, baik 2 dan jelek 2.

    • @juntazen
      @juntazen  3 ปีที่แล้ว

      Terimakasih sebelumnya sdh menonton videonya, Untuk pembahasan di video tsb, karena diambil nilai K sebanyak 4 mas, kemudian dihitung jaraknya dengan euclidean distance. Setelah itu diranking dengan jarak terkecil sebanyak 4 (sesuai nilai K). Kemudian dilihat label nya tersebut di data training sebelumnya seperti misalnya pada kasus 1 th-cam.com/video/yZY9CNcKPkY/w-d-xo.html, itu terlihat di data ke 1, 4, 5 , dan 6 dengan labelnya Baik, Baik, Jelek dan Baik. Sehingga data testing (7,4) dikategorikan dengan Baik.

  • @aisyahahmiyul7104
    @aisyahahmiyul7104 3 ปีที่แล้ว

    pak izin bertanya, kalo menghitung jaraknya menggunakan cosine similarity bagaimana ya pak?

    • @juntazen
      @juntazen  3 ปีที่แล้ว

      untuk menghitung dengan cosine similarity sebetulnya hampir sama, tinggal dimasukkan untuk perhitungan jaraknya, kemudian jarak yang mendekati nilai 1 itulah yang paling mirip, sedangkan yang mendekati 0 itu tidak mirip sama sekali. Kemudian diranking dan diplih sebanyak nilai K dengan nilai yang mendekati 1. Lain kali akan saya buatkan videonya. Terus dukung channel ini ya. Terimakasih

    • @aisyahahmiyul7104
      @aisyahahmiyul7104 3 ปีที่แล้ว

      @@juntazenterimakasih pak. oke pak saya bantu subscribe 👍

  • @ummymusyarofah6362
    @ummymusyarofah6362 ปีที่แล้ว

    Pak mohon izin, kalau menggunakan backaward elimination syntaxnya bagaimana lg ? Terimakasih 🙏🏻

    • @juntazen
      @juntazen  ปีที่แล้ว

      import numpy as np
      from sklearn.neighbors import KNeighborsClassifier
      from sklearn.datasets import load_iris
      from sklearn.model_selection import train_test_split
      from sklearn.metrics import accuracy_score
      # Load dataset
      iris = load_iris()
      X = iris.data
      y = iris.target
      # Bagi dataset menjadi data latih dan data uji
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
      # Inisialisasi nilai K
      K = 5
      # Inisialisasi variabel untuk menyimpan subset atribut yang akan dipertahankan
      selected_features = list(range(X.shape[1]))
      # Tentukan SL (significance level) yang diinginkan
      SL = 0.05
      # Looping untuk menghapus atribut yang tidak signifikan
      while True:
      # Inisialisasi array untuk menyimpan hasil evaluasi model
      p_values = []
      # Looping untuk melakukan evaluasi model dengan setiap atribut yang dipertahankan
      for feature in selected_features:
      # Buat model KNN dengan atribut yang dipertahankan
      knn = KNeighborsClassifier(n_neighbors=K)
      knn.fit(X_train[:, selected_features], y_train)
      # Hitung prediksi model pada data uji
      y_pred = knn.predict(X_test[:, selected_features])
      # Hitung p-value untuk atribut tertentu
      p_value = 1 - accuracy_score(y_test, y_pred)
      # Simpan p-value ke dalam array
      p_values.append(p_value)
      # Cari atribut dengan p-value paling besar
      max_p_value = max(p_values)
      max_p_value_index = p_values.index(max_p_value)
      # Jika p-value paling besar melebihi SL, hapus atribut tersebut
      if max_p_value > SL:
      del selected_features[max_p_value_index]
      else:
      break
      # Buat model KNN dengan subset atribut yang dipertahankan
      knn = KNeighborsClassifier(n_neighbors=K)
      knn.fit(X_train[:, selected_features], y_train)
      # Hitung prediksi model pada data uji dengan subset atribut yang dipertahankan
      y_pred = knn.predict(X_test[:, selected_features])
      # Hitung akurasi model pada data uji dengan subset atribut yang dipertahankan
      accuracy = accuracy_score(y_test, y_pred)
      # Cetak akurasi model
      print("Akurasi model KNN dengan subset atribut yang dipertahankan: {:.2f}%".format(accuracy * 100))

    • @juntazen
      @juntazen  ปีที่แล้ว

      Program di atas mengimplementasikan algoritma Backward Elimination untuk mempertahankan subset atribut yang signifikan pada data latih untuk digunakan dalam model KNN. Algoritma ini dapat membantu meningkatkan akurasi model dengan membuang atribut yang tidak signifikan dan mengurangi dimensi data.
      Program ini diuji pada dataset iris dan mencetak akurasi model KNN pada data uji dengan subset atribut yang dipertahankan. Anda dapat memodifikasi program ini untuk digunakan pada dataset yang berbeda dan menyesuaikan parameter K dan SL sesuai kebutuhan.

  • @siskasiska7176
    @siskasiska7176 3 ปีที่แล้ว

    Pak izin bertanya , kalau misalnya ada tambahan data baru untuk klasifikasi bagaimana cara melakukannya?

    • @juntazen
      @juntazen  3 ปีที่แล้ว

      Data baru untuk klasifikasi akan diklasifikasikan terlebih dahulu dengan algoritma KNN thd data training sebelumnya, kalau sdh mendapatkan target atau labelnya dr hasil prediksi tsb, baru data tersebut bisa menjadi data training baru. Caranya hampir sama dengan perhitungan di video, cm datanya akan nambah satu persatu sesuai dengan data yg ditambahkan

    • @siskasiska7176
      @siskasiska7176 3 ปีที่แล้ว

      @@juntazen maaf pak, cara klasifikasi data baru terhadap data sebelumnya untuk pengimplementasi dalam programnya bagaimana ya pak?

    • @juntazen
      @juntazen  3 ปีที่แล้ว

      untuk di programnya hanya sekali pakai atau 1x iterasi jadi untuk penambahan datanya bisa dilakukan update manual, waktu baca data (read excel atau read csv). Atau bisa dibuatkan fungsi sendiri untuk looping atau perulangannya.

    • @siskasiska7176
      @siskasiska7176 3 ปีที่แล้ว

      @@juntazen oh melakukan update manual, baik pak, Terima kasih banyak ya pak ..

  • @puzpa
    @puzpa ปีที่แล้ว

    Pak ijin bertanya, gimna caranya kalau pake dua metode pak, metode naive bayes dan Knn pak

    • @juntazen
      @juntazen  ปีที่แล้ว

      import numpy as np
      from sklearn import datasets
      from sklearn.model_selection import train_test_split
      from sklearn.naive_bayes import GaussianNB
      from sklearn.neighbors import KNeighborsClassifier
      from sklearn.metrics import accuracy_score
      # load dataset iris
      iris = datasets.load_iris()
      X = iris.data
      y = iris.target
      # bagi data menjadi data training dan data testing
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
      # buat model Naive Bayes
      nb_model = GaussianNB()
      nb_model.fit(X_train, y_train)
      # buat model KNN
      knn_model = KNeighborsClassifier(n_neighbors=5)
      knn_model.fit(X_train, y_train)
      # prediksi kelas menggunakan model Naive Bayes dan model KNN
      nb_pred = nb_model.predict(X_test)
      knn_pred = knn_model.predict(X_test)
      # gabungkan prediksi kedua model
      combined_pred = np.vstack((nb_pred, knn_pred)).T
      # klasifikasi dengan memilih hasil prediksi terbanyak
      final_pred = []
      for pred in combined_pred:
      final_pred.append(np.argmax(np.bincount(pred)))
      # hitung akurasi
      accuracy = accuracy_score(y_test, final_pred)
      print("Akurasi kombinasi Naive Bayes dan KNN: {:.2f}%".format(accuracy*100))

    • @juntazen
      @juntazen  ปีที่แล้ว

      Bisa menggunakan contoh diatas kemudian dimodifikasi sesuai kebutuhan. Pada program di atas, dataset Iris di-load menggunakan fungsi load_iris() dari library scikit-learn. Data kemudian dibagi menjadi data training dan data testing dengan rasio 70:30 menggunakan fungsi train_test_split(). Selanjutnya, dibuat dua model klasifikasi yaitu Naive Bayes dan KNN menggunakan library scikit-learn.
      Setelah model-model dibuat, data testing digunakan untuk memprediksi kelas menggunakan model Naive Bayes dan KNN. Hasil prediksi kedua model digabungkan dengan fungsi vstack() dan hasilnya diteruskan ke tahap klasifikasi, di mana kelas yang diprediksi adalah kelas yang muncul paling banyak pada kedua hasil prediksi.
      Akhirnya, akurasi dari kombinasi kedua model dihitung menggunakan fungsi accuracy_score().

  • @syarof3607
    @syarof3607 2 ปีที่แล้ว

    pak mau bertanya jadi apa yang didapat dari visualisasi diatas?

    • @syarof3607
      @syarof3607 2 ปีที่แล้ว

      bagaimana cara menjelaskannya

    • @juntazen
      @juntazen  2 ปีที่แล้ว

      @@syarof3607 Untuk plot persebaran data (training/testing) "Social Network Ads" berdasarkan hasil klasifikasi dengan algoritma KNN, bisa dilihat dari hasil plot antara umur dan estimasi gaji terhadap labelnya purchased (0 atau 1) ada beberapa data yang diklasifikasikan (hasil prediksi dengan KNN) tidak sesuai (yang harusnya kategori merah masuk ke hijau dan sebaliknya), dimana itu membuktikan plot persebaran antara data hasil prediksi (klasifikasi) dengan KNN terhadap data sebenarnya (training atau testing). Yang nantinya bisa digunakan juga untuk menghitung nilai akurasi dari model hasil prediksi (klasifikasi) dengan accuracy score (perhitungan diagram confusion matrix).

    • @juntazen
      @juntazen  2 ปีที่แล้ว

      sdh saya simpulkan diatas

  • @nurdalia3180
    @nurdalia3180 2 ปีที่แล้ว

    X1= 7 dan x2= 4 itu kita dapatnya dari mana?, atau kita tebak aja bang

    • @juntazen
      @juntazen  2 ปีที่แล้ว

      kita yang menentukan atau dari soal, karena digunakan sebagai sampel data uji (testing)

  • @syifafauziah7879
    @syifafauziah7879 2 ปีที่แล้ว

    Cara mencari jarak di phyton gmna ya pak

    • @juntazen
      @juntazen  2 ปีที่แล้ว

      bisa membuat fungsi sendiri atau dari library sklearn dengan class sklearn.metrics.DistanceMetric.
      Contoh:
      >>> from sklearn.metrics import DistanceMetric
      >>> dist = DistanceMetric.get_metric('euclidean')
      >>> X = [[0, 1, 2],
      [3, 4, 5]]
      >>> dist.pairwise(X)
      array([[ 0. , 5.19615242],
      [ 5.19615242, 0. ]])
      bisa dicek didokumentasinya disini => scikit-learn.org/stable/modules/generated/sklearn.metrics.DistanceMetric.html#sklearn.metrics.DistanceMetric

  • @iwayanpurnasanjaya741
    @iwayanpurnasanjaya741 2 ปีที่แล้ว

    pak boleh sourcecodenya pak

    • @juntazen
      @juntazen  2 ปีที่แล้ว +1

      bisa di download disini mas: colab.research.google.com/drive/13PVC59Z8aZcg_3ai4sU0BNZEltC-nQ4A?usp=sharing