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:-
- Regresi logistik
- Regresi Logistik KNN,
- SVM,
- Bayes yang naif
- Pohon Keputusan,
- 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:-
- Cara Mengatur Notebook Jupyter dengan Python 3 di Ubuntu 20.04
- Cara menggunakan lingkungan virtual python dengan conda
πReferensi
- Apa itu Matriks Kebingungan dalam Pembelajaran Mesin
- Pengkodean kategoris menggunakan Label-Encoding dan One-Hot-Encoder
- Klasifikasi Jamur Menggunakan Pengklasifikasi Berbeda
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 π