Hutan Acak Langsung dengan Python – Menuju AI

Hutan Acak Langsung dengan Python – Menuju AI

Pengarang: Tirendaz Academy

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.

Panduan praktis tentang cara menerapkan hutan acak dengan teknik pencarian grid menggunakan scikit-learn.

Foto oleh liu sicheng di Unsplash

Satu model dapat membuat prediksi yang salah. Tetapi jika Anda menggabungkan prediksi beberapa model menjadi satu, Anda dapat membuat prediksi yang lebih baik. Konsep ini disebut ensemble learning. Ensemble adalah metode yang menggabungkan beberapa model untuk membangun model yang lebih kuat. Metode ensemble telah mendapatkan popularitas besar selama dekade terakhir. Ada dua model ensemble penting berdasarkan pohon keputusan: hutan acak dan peningkatan gradien. Dalam posting ini, saya akan berbicara tentang topik berikut,

Apa itu hutan acak? Beberapa keuntungan dan kerugian dari hutan acak Bagaimana menerapkan hutan acak dengan dataset dunia nyata?

Mari selami!

Akademi Tirendaz

Apa itu Hutan Acak?

Hutan acak adalah algoritma pembelajaran mesin terawasi yang digunakan secara luas dalam masalah klasifikasi dan regresi. Anda dapat menganggap hutan acak sebagai ansambel pohon keputusan. Model pohon keputusan cenderung overfit data pelatihan. Anda dapat mengatasi masalah overfitting menggunakan hutan acak.

Untuk menerapkan hutan acak, Anda perlu membangun banyak pohon keputusan. Hutan acak terdiri dari kumpulan pohon keputusan. Setiap pohon di hutan acak sedikit berbeda dari yang lain. Pohon-pohon ini dipilih sebagai subset fitur yang berbeda. Perhatikan bahwa fitur ini dipilih secara acak. Saat membuat prediksi akhir, prediksi semua pohon digabungkan dan prediksi ini dirata-ratakan. Karena Anda menggunakan banyak pohon, Anda dapat mengurangi jumlah overfitting.

Hutan Acak dengan pemungutan suara pada hasilnya.

Beberapa Keuntungan dari Hutan Acak

Mari kita lihat beberapa keuntungan dari hutan acak.

Anda dapat menggunakan hutan acak untuk tugas klasifikasi dan regresi. Hutan acak sering bekerja dengan baik tanpa penyetelan hyperparameter yang berat. Anda tidak perlu menskalakan data. Hutan acak dapat memberikan akurasi yang lebih baik daripada pohon keputusan karena mengatasi masalah overfitting.

Beberapa Kekurangan Hutan Acak

Ada beberapa kelemahan dari hutan acak. Mari kita lihat kekurangan ini.

Hutan acak tidak dapat dilakukan dengan baik pada dimensi yang sangat tinggi, dan data yang jarang seperti data teks. Hutan acak tidak mudah diinterpretasikan karena menggunakan pohon yang lebih dalam daripada pohon keputusan.

Jadi Anda melihat beberapa keuntungan dan kerugian dari hutan acak. Sekarang mari kita lihat bagaimana menerapkan hutan acak dengan scikit belajar.

Bagaimana Menerapkan Hutan Acak dengan Scikit-Learn?

Untuk menunjukkan bagaimana menerapkan hutan acak, saya akan menggunakan dataset wisconsin kanker payudara. Sebelum memuat dataset, izinkan saya mengimpor pandas.

impor panda sebagai pd

Mari kita memuat dataset.

df = pd.read_csv(“kanker_payudara_wisconsin.csv”)
Foto oleh National Cancer Institute di Unsplash

Anda dapat menemukan buku catatan dan kumpulan data di sini. Mari kita lihat lima baris pertama dari dataset.

df.head()
Lima baris pertama dari kumpulan data kanker payudara

Dataset ini terdiri dari sampel sel tumor ganas dan jinak. Kolom pertama dalam dataset menunjukkan nomor ID unik dan kolom kedua menunjukkan diagnosis, katakanlah M menunjukkan ganas dan B menunjukkan jinak. Kolom lainnya adalah fitur kami. Mari kita lihat bentuk dataset.

df.shape #Keluaran:
(569, 33)

Prapemrosesan Data

Pra-pemrosesan data adalah salah satu tahapan terpenting dalam analisis data. Sekarang, mari kita buat variabel input dan output. Untuk melakukan ini, saya akan menggunakan metode loc. Pertama, izinkan saya membuat variabel target kami.

y = df.loc[:,”diagnosis”].nilai

Mari buat variabel fitur kita dan hapus kolom yang tidak perlu. Untuk melakukan ini, saya akan menggunakan metode drop.

X = df.drop([“diagnosis”,”id”,”Unnamed: 32″],sumbu=1).nilai

Perhatikan bahwa variabel target kita memiliki dua kategori, M dan B. Mari kita mengkodekan variabel target dengan encoder label. Pertama, saya akan mengimpor kelas ini.

dari sklearn.preprocessing impor LabelEncoder

Sekarang, saya akan membuat objek dari kelas ini.

dan = LabelEncoder()

Mari kita sesuaikan dan ubah variabel target kita.

y = le.fit_transform(y)

Sebelum membangun model, mari kita pisahkan dataset menjadi training dan test set. Untuk melakukan ini, saya akan menggunakan fungsi train_test_split. Pertama, izinkan saya mengimpor fungsi ini.

dari sklearn.model_selection impor train_test_split

Mari kita pisahkan dataset kita menggunakan fungsi ini.

X_train,X_test,y_train,y_test=train_test_split(X, y,
stratifikasi = y,
random_state=0)

Dingin. Kumpulan data kami siap untuk dianalisis.

Membangun Model Hutan Acak

Untuk menggunakan hutan acak di Scikit-Learn, kita perlu mengimpor RandomForestClassifier dari modul ensemble. Pertama, mari impor kelas ini.

dari sklearn.ensemble impor RandomForestClassifier

Sekarang, saya akan membuat objek dari kelas ini. Di sini, saya hanya akan menggunakan nilai default

rf = RandomForestClassifier(random_state = 0)

Selanjutnya, mari kita membangun model kita. Untuk melakukan ini, saya akan menggunakan metode fit dengan set pelatihan.

rf.fit(X_train, y_train)

Luar biasa. Model kami siap untuk memprediksi. Mari kita evaluasi model kita menggunakan set pelatihan dan pengujian.

y_train_pred = rf.predict(X_train)
y_test_pred = rf.predict(X_test)

Sekarang, mari kita lihat performa model kita pada kumpulan data. Untuk melakukan ini, saya akan menggunakan fungsi akurasi_score. Pertama, izinkan saya mengimpor fungsi ini.

dari sklearn.metrics impor akurasi_score

Setelah itu, mari kita lihat skor akurasi untuk set pelatihan dan tes.

rf_train = akurasi_score(y_train, y_train_pred)
rf_test = akurasi_score(y_test, y_test_pred)

Sekarang, mari kita cetak skor ini.

print(f’Random forest train/test akurasi: {rf_train: .3f}/{rf_test:.3f}’) #Output:
Akurasi tes/kereta hutan acak: 1.000/0.958

Luar biasa, skor dicetak. Seperti yang Anda lihat, skor pada set pelatihan adalah 100%, dan skor pada set tes adalah 95%. Ini berarti bahwa model memiliki masalah overfitting. Perhatikan bahwa model hutan acak ini mempelajari set pelatihan dengan sangat baik. Jadi, itu hanya menghafal hasilnya. Tapi, model tidak bisa menggeneralisasi. Untuk mengatasi masalah overfitting, kami mengontrol kompleksitas model.

Penyetelan Hyperparameter dengan Pencarian Grid

Untuk kompleksitas model, kita perlu menyetel model menggunakan parameter yang berbeda. Untuk melakukan ini, saya akan menggunakan teknik pencarian grid. Pencarian grid adalah teknik optimasi model hyperparameter. Dalam scikit-learn, teknik ini disediakan di kelas GridSearchCV. Mari impor kelas ini.

dari sklearn.model_selection impor GridSearchCV

Sekarang, saya akan membuat objek dari RandomForestClassifier untuk digunakan dalam pencarian grid.

rf = RandomForestClassifier(random_state = 42)

Saat membangun kelas GridSearchCV, Anda perlu menyediakan kamus hyperparameters untuk mengevaluasi argumen param_grid. Ini adalah peta nama parameter model dan larik nilai untuk dicoba. Sekarang, izinkan saya membuat variabel parameter yang berisi nilai parameter.

parameter = {‘max_depth’:[5,10,20](1)
‘n_estimator’:[i for i in range(10, 100, 10)](2)
‘min_samples_leaf2:[i for i in range(1, 10)](3)
‘kriteria’:[‘gini’, ‘entropy’](4)
‘max_features’: [‘auto’, ‘sqrt’, ‘log2’]} (5)

(1) Kedalaman maksimum pohon. Jika Tidak Ada, maka node diperluas sampai semua daun murni atau sampai semua daun mengandung kurang dari sampel min_samples_split.

(2) Untuk membangun model hutan acak, Anda perlu memutuskan jumlah pohon. Di sini, saya akan membuat nilai untuk parameter n_estimators. n_estimators menentukan jumlah pohon di hutan. Untuk parameter ini, saya digunakan untuk loop dalam daftar.

(3) Parameter min_leaf_size digunakan untuk menentukan jumlah minimum sampel dalam simpul daun. Untuk parameter ini, saya menggunakan daftar loop-in lagi.

(4) Saya menggunakan dua parameter untuk parameter kriteria.

(5) Terakhir, saya mengatur cara memilih fitur. Perhatikan bahwa parameter penting dalam teknik hutan acak adalah max_features. Anda menggunakan parameter ini saat mencari pemisahan terbaik.

Jadi, kami menentukan nilai parameter. Untuk menemukan parameter terbaik, saya akan membuat objek dari GridSearch.

clf = GridSearchCV(rf, parameter, n_jobs= -1)

Selanjutnya, saya akan menyesuaikan model kita dengan set pelatihan.

clf.fit(X_train, y_train)

Terakhir, untuk melihat parameter terbaik, saya akan menggunakan best_params_attribute.

print(clf.best_params_) #Output:
{‘kriteria’: ‘entropi’, ‘max_depth’: 5, ‘max_features’: ‘log2’, ‘min_samples_leaf’: 3, ‘n_estimators’: 10}

Saat kami menjalankan sel ini, Anda dapat melihat parameter terbaik.

Mengevaluasi Model Hutan Acak

Sekarang, saya akan memprediksi nilai set pelatihan dan tes. Perhatikan bahwa kita tidak perlu melatih model kita lagi. Karena setelah parameter terbaik ditemukan, model dilatih dengan parameter tersebut. Jadi Anda bisa langsung menggunakan model clf untuk prediksi. Mari kita prediksi nilai dengan model ini.

y_train_pred=clf.predict(X_train)
y_test_pred=clf.predict(X_test)
rf_train = akurasi_score(y_train, y_train_pred)
rf_test = akurasi_score(y_test, y_test_pred)
print(f’Random forest train/test akurasi: {rf_train: .3f}/{rf_test:.3f}’) #Output:
Akurasi tes/kereta hutan acak: 0.993/0.965

Skor akurasi dicetak sesuai dengan parameter terbaik. Performa model lebih baik pada set pelatihan dan tes. Perhatikan bahwa skor model kami pada set pelatihan dekat dengan skor pada set tes. Selain itu, kedua skor akurasi mendekati 1. Jadi, kami telah menemukan parameter terbaik dan memprediksi nilai pelatihan dan set tes.

Kesimpulan

Dalam posting ini, saya berbicara tentang hutan acak dan bagaimana menerapkan teknik ini dengan scikit learn. Sebuah hutan acak terdiri dari beberapa pohon keputusan. Metode ini merata-ratakan hasil semua pohon untuk menghasilkan model. Jadi Anda bisa mengatasi masalah overfitting dengan pendekatan ini. Anda dapat melakukan tugas klasifikasi dan regresi dengan metode ini. Itu dia. Terima kasih sudah membaca. Saya harap Anda menikmatinya.

Jangan lupa untuk mengikuti kami di YouTube | GitHub | Twitter | Kaggle | LinkedIn.

Jika postingan ini bermanfaat, silakan klik tombol tepuk di bawah ini beberapa kali untuk menunjukkan dukungan Anda kepada saya

Hands-on Random Forest dengan Python awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Scott Anderson