Analisis dan klasifikasi kumpulan data jamur dengan python

Perkenalan

Klasifikasi jamur adalah masalah pembelajaran mesin pemula dan tujuannya adalah untuk mengklasifikasikan dengan benar apakah jamur dapat dimakan atau beracun berdasarkan spesifikasinya seperti bentuk tutup, warna tutup, warna insang, dll. menggunakan pengklasifikasi yang berbeda.

Dalam proyek ini saya telah menggunakan pengklasifikasi berikut untuk membuat prediksi:-

  1. Regresi logistik
  2. Regresi Logistik KNN,
  3. SVM,
  4. Bayes yang naif
  5. Pohon Keputusan,
  6. Pengklasifikasi Hutan Acak

Jika Anda ingin melihat buku catatan asli di Kaggle, silakan kunjungi kaggle-milindsoorya.

Himpunan data

Dataset yang digunakan dalam proyek ini berisi 8124 contoh jamur dengan 23 fitur seperti bentuk tutup, permukaan tutup, warna tutup, memar, bau, dll.

Anda dapat mengunduh kumpulan data dari kaggle jika Anda ingin mengikutinya secara lokal β€” kumpulan data jamur

Pustaka dan paket python yang akan kami gunakan dalam proyek ini adalah:

  • NomorPy
  • Panda
  • Yg keturunan dr laut
  • Matplotlib
  • Grafikviz
  • Scikit-belajar

Memuat kumpulan data

Jika Anda menggunakan kaggle maka pemuatan data telah selesai untuk Anda, Anda hanya perlu menjalankan sel pertama. Jika Anda merasa bingung, Anda dapat merujuk potongan kode di bawah ini.

🎐 Memetikan kaggle

import os
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))
df = pd.read_csv('/kaggle/input/mushroom-classification/mushrooms.csv')
df.head()

🎐 Menggunakan google colab

Jika Anda menggunakan google colab, Anda dapat menggunakan google drive untuk memuat data atau mengunggah data dari komputer Anda, Anda hanya perlu mengunduh kumpulan data dari kaggle dan ketika Anda menjalankan kodenya, Anda dapat mengunggahnya ke colab. Menurut saya metode terakhir lebih mudah dan Anda dapat melakukannya seperti di bawah ini.

import pandas as pd
from google.colab import files
uploaded = files.upload()
df =  pd.read_csv("./mushrooms.csv")

Fungsi Pandas read_csv() mengimpor file CSV (dalam kasus kami, 'mushrooms.csv') ke format DataFrame.

Impor modul

import pandas as pd
import numpy as np
import os 
import matplotlib.pyplot as plt
import seaborn as sns

Memeriksa Data

🎈 β€” Untuk mendapatkan gambaran umum tentang dataset kita dapat menggunakan metode .describe()

df.describe()

Metode .describe() akan memberi Anda statistik kolom.

  • count menunjukkan jumlah tanggapan.
  • unik menunjukkan jumlah nilai kategorikal unik.
  • top menunjukkan nilai kategorikal tertinggi yang muncul.
  • freq menunjukkan frekuensi/hitungan nilai kategorikal tertinggi yang muncul.

Ini adalah bagian dari outputnya:

🎈 β€” Untuk mendapatkan nama kolom, jumlah nilai, tipe data dll kita bisa menggunakan metode info().

# display basic info about data type
df.info()

🎈 β€” Dengan menggunakan metode value_counts() kita dapat melihat bahwa datasetnya seimbang

# display number of samples on each class
df['class'].value_counts()

// Output
e    4208
p    3916
Name: class, dtype: int64

🎈 β€” Pastikan juga tidak ada nilai nol

# check for null values
df.isnull().sum()

Manipulasi data

Datanya bersifat kategoris jadi kami akan menggunakan LabelEncoder untuk mengubahnya menjadi ordinal. LabelEncoder mengonversi setiap nilai dalam kolom menjadi angka.

Pendekatan ini mengharuskan kolom kategori bertipe data 'kategori'. Secara default, kolom non-numerik adalah tipe data 'objek'. Dari metode df.info(), kita melihat bahwa kolom kita bertipe data 'objek'. Jadi kita harus mengubah tipenya menjadi 'kategori' sebelum menggunakan pendekatan ini.

df = df.astype('category')
df.dtypes

Sekarang kita telah mengonversi kolom menjadi tipe kategori, kita dapat menggunakan LabelEncoder untuk membuat kolom menjadi format yang dapat dimengerti mesin.

# Using LabelEncoder to convert catergory values to ordinal
from sklearn.preprocessing import LabelEncoder
labelencoder=LabelEncoder()
for column in df.columns:
    df[column] = labelencoder.fit_transform(df[column])

df.head()

dari gambar di atas kita dapat melihat bahwa tipe kerudung hanya memiliki satu nilai unik dan karenanya tidak akan memberikan kontribusi apa pun pada data. Jadi kita bisa menghapusnya dengan aman.

df = df.drop(["veil-type"],axis=1)

di sini axis-1 berarti kita membuang seluruh kolom (yaitu secara vertikal), jika axis-0 kita akan membuang seluruh baris (yaitu secara horizontal).

Mempersiapkan datanya

Kita dapat menggunakan metode train_test_split scikit-learn untuk membuat data pelatihan dan pengujian.

from sklearn.model_selection import train_test_split
# "class" column as numpy array.
y = df["class"].values
# All data except "class" column.
x = df.drop(["class"], axis=1).values
# Split data for train and test.
x_train, x_test, y_train, y_test = train_test_split(x,y,random_state=42,test_size=0.2)

Metode Klasifikasi

1. Klasifikasi Regresi Logistik

from sklearn.linear_model import LogisticRegression

## lr = LogisticRegression(solver="lbfgs")
lr = LogisticRegression(solver="liblinear")
lr.fit(x_train,y_train)

print("Test Accuracy: {}%".format(round(lr.score(x_test,y_test)*100,2)))

// Output

Test Accuracy: 94.65%

2. Klasifikasi KNN

from sklearn.neighbors import KNeighborsClassifier

best_Kvalue = 0
best_score = 0

for i in range(1,10):
    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(x_train,y_train)
    if knn.score(x_test,y_test) > best_score:
        best_score = knn.score(x_train,y_train)
        best_Kvalue = i

print("""Best KNN Value: {}
Test Accuracy: {}%""".format(best_Kvalue, round(best_score*100,2)))

// Output
Test Accuracy: 94.65%

3. Klasifikasi SVM

from sklearn.svm import SVC
svm = SVC(random_state=42, gamma="auto")
svm.fit(x_train,y_train)
print("Test Accuracy: {}%".format(round(svm.score(x_test,y_test)*100,2)))
// Output
Test Accuracy: 100.0%

4. Klasifikasi Naif Bayes

from sklearn.naive_bayes import GaussianNB
nb = GaussianNB()
nb.fit(x_train,y_train)
print("Test Accuracy: {}%".format(round(nb.score(x_test,y_test)*100,2)))
// Output
Test Accuracy: 92.18%

5. Klasifikasi Pohon Keputusan

from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(x_train,y_train)
print("Test Accuracy: {}%".format(round(dt.score(x_test,y_test)*100,2)))
// Output
Test Accuracy: 100.0%

6. Klasifikasi Hutan Secara Acak

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(x_train,y_train)
print("Test Accuracy: {}%".format(round(rf.score(x_test,y_test)*100,2)))
// Output
Test Accuracy: 100.0%

Pengecekan Hasil Klasifikasi dengan Confusion Matrix

Pada bagian ini, saya akan memeriksa hasil dengan matriks konfusi pada Regresi Logistik dan Klasifikasi KNN.

Matriks konfusi adalah teknik untuk merangkum kinerja algoritma klasifikasi. Akurasi klasifikasi saja bisa menyesatkan jika Anda memiliki jumlah observasi yang tidak sama di setiap kelas atau jika Anda memiliki lebih dari dua kelas dalam kumpulan data Anda.

Akurasi Regresi Logistik adalah 97,05% dan KNN adalah 100%.

from sklearn.metrics import confusion_matrix
# Linear Regression
y_pred_lr = lr.predict(x_test)
y_true_lr = y_test
cm = confusion_matrix(y_true_lr, y_pred_lr)
f, ax = plt.subplots(figsize =(5,5))
sns.heatmap(cm,annot = True,linewidths=0.5,linecolor="red",fmt = ".0f",ax=ax)
plt.xlabel("y_pred_lr")
plt.ylabel("y_true_lr")
plt.show()

# Random Forest
y_pred_rf = rf.predict(x_test)
y_true_rf = y_test
cm = confusion_matrix(y_true_rf, y_pred_rf)
f, ax = plt.subplots(figsize =(5,5))
sns.heatmap(cm,annot = True,linewidths=0.5,linecolor="red",fmt = ".0f",ax=ax)
plt.xlabel("y_pred_rf")
plt.ylabel("y_true_rf")
plt.show()

Kesimpulan

Dari matriks konfusi, kami melihat bahwa data pelatihan dan pengujian kami seimbang.

Sebagian besar metode klasifikasi mencapai akurasi 100% dengan kumpulan data ini.

πŸŽƒ Anda mungkin juga menyukai:-

πŸ”ŽReferensi

Bergabunglah dengan FAUN: "Situs Web"πŸ’»|"Podcast"πŸŽ™οΈ|"Twitter"🐦|"Facebook"πŸ‘₯ |"Instagram"πŸ“·|"Grup Facebook"πŸ—£οΈ|"Grup Linkedin"πŸ’¬| Slack πŸ“±|Cloud Native BeritaπŸ“°|.

Jika postingan ini bermanfaat, silakan klik tombol tepuk πŸ‘ di bawah beberapa kali untuk menunjukkan dukungan Anda kepada penulis πŸ‘‡