Tutorial Machine Learning dengan Dataset Black Friday
Dalam tutorial ini, Anda akan mempelajari cara mengisi nilai null, melakukan prapemrosesan data, mengurangi dimensi menggunakan PCA, dan membagi data menggunakan K-Fold.
Baris di atas menampilkan sebagian dataset yang terdiri dari 10 baris dan semua kolom. Jika Anda mencoba memberikan bfriday.head(x,y) akan terjadi error karena komputer sudah menganggap jumlah total kolom wajib. bfriday.head() juga akan memberi output tanpa error dan komputer mengambil jumlah baris dan kolom sesuai defaultnya.
bfriday.shape #ini memberi dimensi dataset (baris, kolom)Didukung oleh
b =['Product_Category_2','Product_Category_3']#di sini kita membuat array berisi 2 kolom yaitu Product_Category_2, Product_Category_3Didukung oleh
for i in b:exec("bfriday.%s.fillna(bfriday.%s.value_counts().idxmax(), inplace=True)"%(i,i))Didukung oleh
Sekarang kita akan mengisi nilai kosong dengan nilai maksimum. Kita juga bisa membersihkan atau mengisi nilai kosong dengan bfriday.Product_Category_2.fillna(bfriday.Product_Category_2.value_counts().idxmax(),inplace=True); serupa untuk kolom bernama Product_category_3.
Kita sekarang menghapus kolom bernama purchase dari dataset dan membentuk array bernama X yang terdiri dari semua kolom kecuali kolom purchase.
from sklearn.preprocessing import LabelEncoder#Sekarang mari impor encoder dari pustaka sklearn
LE = LabelEncoder()#Sekarang kita akan mengodekan data menjadi label menggunakan label encoder agar komputasi lebih mudahDidukung oleh
X = X.apply(LE.fit_transform)#Di sini kita menerapkan encoder pada dataDidukung oleh
Sekarang kita akan mengonversi data ke bentuk numerik menggunakan pandas karena menangani data numerik lebih mudah daripada data kategorikal.
Y = bfriday["Purchase"]#Di sini kita membuat array bernama Y yang berisi data dari kolom purchaseDidukung oleh
from sklearn.preprocessing import StandardScaler
SS = StandardScaler()Didukung oleh
Menstandarkan fitur dengan menghilangkan mean dan menskalakan ke varians satuan. Proses centering dan scaling dilakukan secara independen pada setiap fitur dengan menghitung statistik yang relevan pada sampel di set pelatihan. Mean dan standar deviasi kemudian disimpan untuk digunakan pada data berikutnya menggunakan metode transform.
Xs = SS.fit_transform(X)#Anda harus mengubah X ke representasi numerik (tidak harus biner). Karena semua metode machine learning beroperasi pada matriks angkaDidukung oleh
from sklearn.decomposition import PCA
pc = PCA(4)#di sini 4 menunjukkan jumlah komponen yang Anda inginkanDidukung oleh
Reduksi dimensi linear menggunakan Singular Value Decomposition dari data untuk memproyeksikannya ke ruang berdimensi lebih rendah. PCA adalah salah satu metode reduksi dimensi yang paling sering digunakan dan terkenal. Untuk mempercepat algoritma machine learning, Anda memasang PCA hanya pada set pelatihan. Principal component analysis (PCA)
PCA menggantikan variabel asli dengan variabel baru, yang disebut komponen utama, yang memiliki kovariansi nol dan memiliki varians dalam urutan menurun. Jadi, matriks kovariansi antara komponen utama diekstraksi dari data.
Kita punya sesuatu yang menarik di sini bernama RandomizedPCA
Catatan: Jangan pernah menggunakan RandomizedPCA untuk data sparse. Penggunaan RandomizedPCA pada data sparse tidak tepat karena kita tidak bisa melakukan centering pada data tanpa merusak sifat sparsity, yang dapat membengkakkan penggunaan memori pada data sparse berukuran realistis. Namun, centering diperlukan untuk PCA.
principalComponents = pc.fit_transform(X)#Di sini kita menerapkan PCA ke data/memasangkan data ke PCADidukung oleh
from sklearn.model_selection import KFold
kf = KFold(20)#Menyediakan indeks train/test untuk membagi data menjadi set train/test. Membagi dataset menjadi k lipatan berurutan (tanpa pengacakan secara default).#Setiap lipatan kemudian digunakan sekali sebagai validasi sementara k - 1 lipatan lainnya menjadi set pelatihan.Didukung oleh
for a,b in kf.split(principalDf):
X_train, X_test = Xs[a],Xs[b]
y_train, y_test = Y[a],Y[b]Didukung oleh
from sklearn.linear_model import LinearRegression
Didukung oleh
Regresi digunakan untuk menelaah dua hal: (1) apakah sekumpulan variabel prediktor dapat memprediksi variabel keluaran (dependen) dengan baik? (2) Variabel mana yang menjadi prediktor signifikan terhadap variabel keluaran, dan bagaimana pengaruhnya—ditunjukkan oleh besar dan tanda koefisien beta? Estimasi regresi ini digunakan untuk menjelaskan hubungan antara satu variabel dependen dan satu atau lebih variabel independen. Bentuk paling sederhana dari persamaan regresi dengan satu variabel dependen dan satu variabel independen didefinisikan oleh rumus y = c + b*x, di mana y = nilai taksiran variabel dependen, c = konstanta, b = koefisien regresi, dan x = skor pada variabel independen.
from sklearn.tree import DecisionTreeRegressor
Didukung oleh
Sebuah decision tree dibangun dari atas ke bawah dari sebuah root node dan melibatkan pemartisian data menjadi subset yang berisi instance dengan nilai serupa. Decision tree membangun model dalam bentuk struktur pohon. Ia memecah dataset menjadi subset yang semakin kecil sembari sebuah decision tree dibangun secara bertahap. Hasil akhirnya adalah pohon dengan node keputusan dan node daun. Node keputusan (misalnya, Outlook) memiliki dua atau lebih cabang (misalnya, Sunny, Overcast, dan Rainy), masing-masing mewakili nilai untuk atribut yang diuji. Node daun (misalnya, Hours Played) mewakili keputusan pada target numerik. Node keputusan teratas pada pohon yang berkorelasi dengan prediktor terbaik disebut root node. Decision tree dapat menangani data kategorikal maupun numerik. Decision tree di mana variabel target dapat bernilai kontinu (biasanya bilangan riil) disebut regression tree. Jika kedalaman maksimum pohon ditetapkan terlalu tinggi, decision tree akan mempelajari detail yang terlalu halus dari data pelatihan dan mempelajari noise, yaitu overfit.
from sklearn.ensemble import RandomForestRegressor
Didukung oleh
Random forest adalah estimator yang melatih sejumlah pohon keputusan pengklasifikasi pada berbagai sub-sampel dari dataset dan menggunakan perataan untuk meningkatkan akurasi prediksi serta mengendalikan overfitting. Ukuran sub-sampel selalu sama dengan ukuran sampel masukan asli tetapi sampel diambil dengan penggantian jika bootstrap=True. Gagasan di balik teknik ini adalah mendekorelasi beberapa pohon. Ia menghasilkan sampel bootstrap yang berbeda (yakni sampel yang dibangkitkan sendiri) dari Data pelatihan. Lalu kita mengurangi varians pada pohon dengan meratakannya. Dengan demikian, pendekatan ini membuat sejumlah besar decision tree di Python atau R. Model random forest sangat baik dalam menangani data tabular dengan fitur numerik, atau fitur kategorikal dengan kurang dari ratusan kategori. Random forest mampu menangkap interaksi nonlinier antara fitur dan target.
Catatan: Model berbasis pohon tidak dirancang untuk bekerja dengan fitur yang sangat sparse. Saat menangani data masukan sparse, kita bisa melakukan prapemrosesan fitur sparse untuk menghasilkan statistik numerik atau beralih ke model linear yang lebih cocok untuk skenario semacam itu.
from sklearn.ensemble import GradientBoostingRegressor
Didukung oleh
Gradient boosting adalah teknik machine learning untuk masalah regresi dan klasifikasi, yang menghasilkan model prediksi dalam bentuk ansambel model prediksi lemah, biasanya decision tree. Ia membangun model secara bertahap seperti metode boosting lainnya, dan menggeneralisasikannya dengan memungkinkan optimasi fungsi loss yang terdiferensiasi sewenang-wenang. Boosting dapat ditafsirkan sebagai algoritma optimasi pada fungsi biaya yang sesuai. Dua makalah terakhir memperkenalkan pandangan algoritma boosting sebagai algoritma gradient descent fungsional iteratif. Artinya, algoritma yang mengoptimalkan fungsi biaya pada ruang fungsi dengan berulang kali memilih sebuah fungsi (hipotesis lemah) yang mengarah ke arah gradien negatif. Pandangan gradien fungsional ini terhadap boosting telah mendorong pengembangan algoritma boosting di banyak area machine learning dan statistik di luar regresi dan klasifikasi. Gradient boosting menggabungkan "pembelajar" lemah menjadi satu pembelajar kuat secara iteratif. Paling mudah dijelaskan dalam pengaturan regresi least-squares, di mana tujuannya adalah "mengajari" model F untuk memprediksi nilai berbentuk y ^ = F ( x ) dengan meminimalkan mean squared error.
lr = LinearRegression()
dtr = DecisionTreeRegressor()
rfr = RandomForestRegressor()
gbr = GradientBoostingRegressor()Didukung oleh
fit1 = lr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke linear regressor
fit2 = dtr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke Decision Tree Regressor
fit3 = rfr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke Random Forest Regressor
fit4 = gbr.fit(X_train,y_train)#Di sini kita memasangkan data pelatihan ke Gradient Boosting RegressorDidukung oleh
Sejauh ini Anda telah melihat fit dan fit_transform tetapi belum memahami apa itu? Mari pelajari sekarang.
fit(): Digunakan untuk menghasilkan parameter model pembelajaran dari data pelatihan.
transform(): Parameter yang dihasilkan dari metode fit() diterapkan pada model untuk menghasilkan dataset yang telah ditransformasi.
fit_transform(): Kombinasi API fit() dan transform() pada dataset yang sama.
print("Accuracy Score of Linear regression on train set",fit1.score(X_train,y_train)*100)print("Accuracy Score of Decision Tree on train set",fit2.score(X_train,y_train)*100)print("Accuracy Score of Random Forests on train set",fit3.score(X_train,y_train)*100)print("Accuracy Score of Gradient Boosting on train set",fit4.score(X_train,y_train)*100)Didukung oleh
Accuracy Score of Linear regression on train set11.829233894211866
Accuracy Score of Decision Tree on train set100.0
Accuracy Score of Random Forests on train set94.207451077798
Accuracy Score of Gradient Boosting on train set65.49517152859553Didukung oleh
print("Accuracy Score of Linear regression on test set",fit1.score(X_test,y_test)*100)print("Accuracy Score of Decision Tree on test set",fit2.score(X_test,y_test)*100)print("Accuracy Score of Random Forests on test set",fit3.score(X_test,y_test)*100)print("Accuracy Score of Gradient Boosting on testset",fit4.score(X_test,y_test)*100)Didukung oleh
Accuracy Score of Linear regression on test set36.8210287243639
Accuracy Score of Decision Tree on test set57.61911563230391
Accuracy Score of Random Forests on test set74.71675935214292
Accuracy Score of Gradient Boosting on testset 72.43849411693184Didukung oleh
Kesimpulan
Tutorial ini memberikan gambaran cepat tentang cara mengisi nilai null. Saya menulisnya karena kebanyakan data nyata jauh lebih berantakan: ada nilai null, nilai yang salah, dan banyak sisa yang harus dibersihkan. Hore! Anda telah menyelesaikan tutorial ini. Jika Anda punya pertanyaan atau pemikiran tentang tutorial ini, jangan ragu untuk menyampaikannya di kolom komentar di bawah.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Pertama, mari impor pustaka dasar yang diperlukan untuk mengolah dataset.
Sekarang mari baca dataset dan lihat isinya.
Baris di atas menampilkan sebagian dataset yang terdiri dari 10 baris dan semua kolom. Jika Anda mencoba memberikan bfriday.head(x,y) akan terjadi error karena komputer sudah menganggap jumlah total kolom wajib. bfriday.head() juga akan memberi output tanpa error dan komputer mengambil jumlah baris dan kolom sesuai defaultnya.
Sekarang kita akan mengisi nilai kosong dengan nilai maksimum. Kita juga bisa membersihkan atau mengisi nilai kosong dengan bfriday.Product_Category_2.fillna(bfriday.Product_Category_2.value_counts().idxmax(),inplace=True); serupa untuk kolom bernama Product_category_3.
Kita sekarang menghapus kolom bernama purchase dari dataset dan membentuk array bernama X yang terdiri dari semua kolom kecuali kolom purchase.
Sekarang kita akan mengonversi data ke bentuk numerik menggunakan pandas karena menangani data numerik lebih mudah daripada data kategorikal.
Menstandarkan fitur dengan menghilangkan mean dan menskalakan ke varians satuan. Proses centering dan scaling dilakukan secara independen pada setiap fitur dengan menghitung statistik yang relevan pada sampel di set pelatihan. Mean dan standar deviasi kemudian disimpan untuk digunakan pada data berikutnya menggunakan metode transform.
Reduksi dimensi linear menggunakan Singular Value Decomposition dari data untuk memproyeksikannya ke ruang berdimensi lebih rendah. PCA adalah salah satu metode reduksi dimensi yang paling sering digunakan dan terkenal. Untuk mempercepat algoritma machine learning, Anda memasang PCA hanya pada set pelatihan. Principal component analysis (PCA)
PCA menggantikan variabel asli dengan variabel baru, yang disebut komponen utama, yang memiliki kovariansi nol dan memiliki varians dalam urutan menurun. Jadi, matriks kovariansi antara komponen utama diekstraksi dari data.
Kita punya sesuatu yang menarik di sini bernama RandomizedPCA
Catatan: Jangan pernah menggunakan RandomizedPCA untuk data sparse. Penggunaan RandomizedPCA pada data sparse tidak tepat karena kita tidak bisa melakukan centering pada data tanpa merusak sifat sparsity, yang dapat membengkakkan penggunaan memori pada data sparse berukuran realistis. Namun, centering diperlukan untuk PCA.
Regresi digunakan untuk menelaah dua hal: (1) apakah sekumpulan variabel prediktor dapat memprediksi variabel keluaran (dependen) dengan baik? (2) Variabel mana yang menjadi prediktor signifikan terhadap variabel keluaran, dan bagaimana pengaruhnya—ditunjukkan oleh besar dan tanda koefisien beta? Estimasi regresi ini digunakan untuk menjelaskan hubungan antara satu variabel dependen dan satu atau lebih variabel independen. Bentuk paling sederhana dari persamaan regresi dengan satu variabel dependen dan satu variabel independen didefinisikan oleh rumus y = c + b*x, di mana y = nilai taksiran variabel dependen, c = konstanta, b = koefisien regresi, dan x = skor pada variabel independen.
Sebuah decision tree dibangun dari atas ke bawah dari sebuah root node dan melibatkan pemartisian data menjadi subset yang berisi instance dengan nilai serupa. Decision tree membangun model dalam bentuk struktur pohon. Ia memecah dataset menjadi subset yang semakin kecil sembari sebuah decision tree dibangun secara bertahap. Hasil akhirnya adalah pohon dengan node keputusan dan node daun. Node keputusan (misalnya, Outlook) memiliki dua atau lebih cabang (misalnya, Sunny, Overcast, dan Rainy), masing-masing mewakili nilai untuk atribut yang diuji. Node daun (misalnya, Hours Played) mewakili keputusan pada target numerik. Node keputusan teratas pada pohon yang berkorelasi dengan prediktor terbaik disebut root node. Decision tree dapat menangani data kategorikal maupun numerik. Decision tree di mana variabel target dapat bernilai kontinu (biasanya bilangan riil) disebut regression tree. Jika kedalaman maksimum pohon ditetapkan terlalu tinggi, decision tree akan mempelajari detail yang terlalu halus dari data pelatihan dan mempelajari noise, yaitu overfit.
Random forest adalah estimator yang melatih sejumlah pohon keputusan pengklasifikasi pada berbagai sub-sampel dari dataset dan menggunakan perataan untuk meningkatkan akurasi prediksi serta mengendalikan overfitting. Ukuran sub-sampel selalu sama dengan ukuran sampel masukan asli tetapi sampel diambil dengan penggantian jika bootstrap=True. Gagasan di balik teknik ini adalah mendekorelasi beberapa pohon. Ia menghasilkan sampel bootstrap yang berbeda (yakni sampel yang dibangkitkan sendiri) dari Data pelatihan. Lalu kita mengurangi varians pada pohon dengan meratakannya. Dengan demikian, pendekatan ini membuat sejumlah besar decision tree di Python atau R. Model random forest sangat baik dalam menangani data tabular dengan fitur numerik, atau fitur kategorikal dengan kurang dari ratusan kategori. Random forest mampu menangkap interaksi nonlinier antara fitur dan target.
Catatan: Model berbasis pohon tidak dirancang untuk bekerja dengan fitur yang sangat sparse. Saat menangani data masukan sparse, kita bisa melakukan prapemrosesan fitur sparse untuk menghasilkan statistik numerik atau beralih ke model linear yang lebih cocok untuk skenario semacam itu.
Gradient boosting adalah teknik machine learning untuk masalah regresi dan klasifikasi, yang menghasilkan model prediksi dalam bentuk ansambel model prediksi lemah, biasanya decision tree. Ia membangun model secara bertahap seperti metode boosting lainnya, dan menggeneralisasikannya dengan memungkinkan optimasi fungsi loss yang terdiferensiasi sewenang-wenang. Boosting dapat ditafsirkan sebagai algoritma optimasi pada fungsi biaya yang sesuai. Dua makalah terakhir memperkenalkan pandangan algoritma boosting sebagai algoritma gradient descent fungsional iteratif. Artinya, algoritma yang mengoptimalkan fungsi biaya pada ruang fungsi dengan berulang kali memilih sebuah fungsi (hipotesis lemah) yang mengarah ke arah gradien negatif. Pandangan gradien fungsional ini terhadap boosting telah mendorong pengembangan algoritma boosting di banyak area machine learning dan statistik di luar regresi dan klasifikasi. Gradient boosting menggabungkan "pembelajar" lemah menjadi satu pembelajar kuat secara iteratif. Paling mudah dijelaskan dalam pengaturan regresi least-squares, di mana tujuannya adalah "mengajari" model F untuk memprediksi nilai berbentuk y ^ = F ( x ) dengan meminimalkan mean squared error.
Sejauh ini Anda telah melihat fit dan fit_transform tetapi belum memahami apa itu? Mari pelajari sekarang.
fit(): Digunakan untuk menghasilkan parameter model pembelajaran dari data pelatihan.
transform(): Parameter yang dihasilkan dari metode fit() diterapkan pada model untuk menghasilkan dataset yang telah ditransformasi.
fit_transform(): Kombinasi API fit() dan transform() pada dataset yang sama.
Kesimpulan
Tutorial ini memberikan gambaran cepat tentang cara mengisi nilai null. Saya menulisnya karena kebanyakan data nyata jauh lebih berantakan: ada nilai null, nilai yang salah, dan banyak sisa yang harus dibersihkan. Hore! Anda telah menyelesaikan tutorial ini. Jika Anda punya pertanyaan atau pemikiran tentang tutorial ini, jangan ragu untuk menyampaikannya di kolom komentar di bawah.
Jika Anda ingin mempelajari lebih lanjut tentang Machine Learning di Python, lihat tutorial Introduction to Machine Learning in Python dan kursus Preprocessing for Machine Learning in Python dari DataCamp.