|
|
3 months ago | |
|---|---|---|
| .. | ||
| solution | 5 months ago | |
| README.md | 3 months ago | |
| assignment.md | 5 months ago | |
| notebook.ipynb | 10 months ago | |
README.md
Pengelas masakan 1
Dalam pelajaran ini, anda akan menggunakan set data yang anda simpan daripada pelajaran terakhir yang penuh dengan data seimbang dan bersih semuanya mengenai masakan.
Anda akan menggunakan set data ini dengan pelbagai pengelas untuk meramalkan masakan nasional yang diberikan berdasarkan kumpulan ramuan. Semasa melakukannya, anda akan belajar lebih lanjut tentang beberapa cara di mana algoritma boleh dimanfaatkan untuk tugasan pengelasan.
Kuiz pra-ceramah
Persediaan
Dengan anggapan anda telah menyelesaikan Pelajaran 1, pastikan fail cleaned_cuisines.csv wujud dalam folder root /data untuk keempat-empat pelajaran ini.
Latihan - ramalkan masakan nasional
-
Bekerja dalam folder notebook.ipynb pelajaran ini, import fail itu bersama pustaka Pandas:
import pandas as pd cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") cuisines_df.head()Data terlihat seperti ini:
| Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
-
Sekarang, import beberapa pustaka lagi:
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve from sklearn.svm import SVC import numpy as np -
Bahagikan koordinat X dan y kepada dua dataframe untuk latihan.
cuisineboleh menjadi dataframe label:cuisines_label_df = cuisines_df['cuisine'] cuisines_label_df.head()Ia akan kelihatan seperti ini:
0 indian 1 indian 2 indian 3 indian 4 indian Name: cuisine, dtype: object -
Buang lajur
Unnamed: 0dan lajurcuisineitu, dengan memanggildrop(). Simpan baki data sebagai ciri boleh latih:cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) cuisines_feature_df.head()Ciri-ciri anda kelihatan seperti ini:
| almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
Kini anda sudah bersedia untuk melatih model anda!
Memilih pengelas anda
Setelah data anda bersih dan siap untuk latihan, anda perlu memutuskan algoritma mana yang digunakan untuk tugasan itu.
Scikit-learn mengkelaskan klasifikasi di bawah Pembelajaran Berpenyelia, dan dalam kategori itu anda akan menemui banyak cara untuk mengklasifikasikan. Kepelbagaian agak mengelirukan pada pandangan pertama. Kaedah berikut semuanya termasuk teknik klasifikasi:
- Model Linear
- Mesin Sokongan Vektor
- Kecerunan Stokastik Turunan
- Jiran Terdekat
- Proses Gaussian
- Pokok Keputusan
- Kaedah Ensemble (Pengelas pengundian)
- Algoritma multiclass dan multioutput (klasifikasi multiclass dan multilabel, klasifikasi multiclass-multioutput)
Anda juga boleh menggunakan rangkaian neural untuk mengklasifikasikan data, tetapi itu di luar skop pelajaran ini.
Pengelas mana untuk dipilih?
Jadi, pengelas mana yang harus anda pilih? Selalunya, menjalankan beberapa pengelas dan mencari hasil yang baik adalah cara untuk menguji. Scikit-learn menawarkan perbandingan sebelah-menyebelah pada set data yang dibuat, membandingkan KNeighbors, SVC dua cara, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB dan QuadraticDiscrinationAnalysis, menunjukkan keputusan secara visual:
Plot dijana pada dokumentasi Scikit-learn
AutoML menyelesaikan masalah ini dengan kemas dengan menjalankan perbandingan ini di awan, membolehkan anda memilih algoritma terbaik untuk data anda. Cuba di sini
Pendekatan yang lebih baik
Cara yang lebih baik daripada meneka secara rawak, bagaimanapun, adalah mengikuti idea dalam Lembaran Cheat ML yang boleh dimuat turun ini. Di sini, kita dapati bahawa untuk masalah multiclass kita, kita mempunyai beberapa pilihan:
Seksyen Lembaran Cheat Algoritma Microsoft, memperincikan pilihan klasifikasi multiclass
✅ Muat turun lembaran cheat ini, cetaknya, dan gantung di dinding anda!
Penalaran
Mari lihat jika kita boleh beralasan melalui pendekatan yang berbeza memandangkan kekangan yang kita ada:
- Rangkaian neural terlalu berat. Dengan set data yang bersih tetapi minimum, dan fakta bahawa kita menjalankan latihan secara tempatan melalui notebook, rangkaian neural terlalu berat untuk tugasan ini.
- Tiada pengelas dua kelas. Kita tidak menggunakan pengelas dua kelas, jadi itu menolak satu-vs-semua.
- Pokok keputusan atau regresi logistik boleh berfungsi. Pokok keputusan mungkin berfungsi, atau regresi logistik untuk data multiclass.
- Pokok Keputusan Didorong multiclass menyelesaikan masalah berbeza. Pokok keputusan yang didorong multiclass paling sesuai untuk tugas bukan parametrik, misalnya tugasan yang direka untuk membina penggredan, jadi ia tidak berguna untuk kita.
Menggunakan Scikit-learn
Kita akan menggunakan Scikit-learn untuk menganalisis data kita. Walau bagaimanapun, terdapat banyak cara untuk menggunakan regresi logistik dalam Scikit-learn. Lihatlah parameter yang perlu diserahkan.
Asasnya, terdapat dua parameter penting - multi_class dan solver - yang kita perlu tetapkan, apabila kita meminta Scikit-learn melakukan regresi logistik. Nilai multi_class menerapkan tingkah laku tertentu. Nilai solver adalah algoritma yang digunakan. Tidak semua solver boleh digabungkan dengan semua nilai multi_class.
Menurut dokumentasi, dalam kes multiclass, algoritma latihan:
- Menggunakan skim one-vs-rest (OvR), jika pilihan
multi_classditetapkan kepadaovr - Menggunakan cross-entropy loss, jika pilihan
multi_classditetapkan kepadamultinomial. (Pilihanmultinomialkini disokong hanya oleh solver ‘lbfgs’, ‘sag’, ‘saga’ dan ‘newton-cg’.)"
🎓 'Skim' di sini boleh sama ada 'ovr' (one-vs-rest) atau 'multinomial'. Oleh kerana regresi logistik sebenarnya direka untuk menyokong klasifikasi binari, skim ini membolehkan ia menangani tugasan klasifikasi multiclass dengan lebih baik. sumber
🎓 'Solver' ditakrifkan sebagai "algoritma yang digunakan dalam masalah pengoptimuman". sumber.
Scikit-learn menawarkan jadual ini untuk menerangkan bagaimana solver mengendalikan cabaran yang berbeza yang dibentangkan oleh jenis struktur data yang berbeza:
Latihan - bahagi data
Kita boleh menumpukan kepada regresi logistik untuk percubaan latihan pertama kita kerana anda baru-baru ini belajar mengenainya dalam pelajaran sebelumnya.
Bahagikan data anda kepada kumpulan latihan dan ujian dengan memanggil train_test_split():
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
Latihan - gunakan regresi logistik
Oleh kerana anda menggunakan kes multiclass, anda perlu memilih skim apa yang hendak digunakan dan solver apa yang hendak ditetapkan. Gunakan LogisticRegression dengan tetapan multiclass dan solver liblinear untuk melatih.
-
Cipta regresi logistik dengan multi_class ditetapkan kepada
ovrdan solver ditetapkan kepadaliblinear:lr = LogisticRegression(multi_class='ovr',solver='liblinear') model = lr.fit(X_train, np.ravel(y_train)) accuracy = model.score(X_test, y_test) print ("Accuracy is {}".format(accuracy))✅ Cuba solver lain seperti
lbfgs, yang sering ditetapkan sebagai lalaiNota, gunakan fungsi Pandas
raveluntuk meratakan data anda bila perlu.Ketepatan adalah baik, melebihi 80%!
-
Anda boleh melihat model ini beraksi dengan menguji satu baris data (#50):
print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') print(f'cuisine: {y_test.iloc[50]}')Keputusan dicetak:
ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') cuisine: indian✅ Cuba nombor baris berbeza dan periksa keputusan
-
Menggali lebih dalam, anda boleh memeriksa ketepatan ramalan ini:
test= X_test.iloc[50].values.reshape(-1, 1).T proba = model.predict_proba(test) classes = model.classes_ resultdf = pd.DataFrame(data=proba, columns=classes) topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) topPrediction.head()Keputusan dicetak - Masakan India adalah tekaan terbaiknya, dengan kebarangkalian yang baik:
0 indian 0.715851 chinese 0.229475 japanese 0.029763 korean 0.017277 thai 0.007634 ✅ Bolehkah anda jelaskan mengapa model ini agak pasti ini adalah masakan India?
-
Dapatkan lebih banyak butiran dengan mencetak laporan klasifikasi, seperti yang anda lakukan dalam pelajaran regresi:
y_pred = model.predict(X_test) print(classification_report(y_test,y_pred))precision recall f1-score support chinese 0.73 0.71 0.72 229 indian 0.91 0.93 0.92 254 japanese 0.70 0.75 0.72 220 korean 0.86 0.76 0.81 242 thai 0.79 0.85 0.82 254 accuracy 0.80 1199 macro avg 0.80 0.80 0.80 1199 weighted avg 0.80 0.80 0.80 1199
🚀Cabaran
Dalam pelajaran ini, anda menggunakan data yang telah dibersihkan untuk membina model pembelajaran mesin yang boleh meramalkan masakan kebangsaan berdasarkan siri bahan-bahan. Luangkan masa untuk membaca pelbagai pilihan yang disediakan oleh Scikit-learn untuk mengklasifikasikan data. Selidiki lebih jauh konsep 'solver' untuk memahami apa yang berlaku di belakang tabir.
Kuiz pasca kuliah
Ulasan & Belajar Sendiri
Gali lebih dalam matematik di sebalik regresi logistik dalam pelajaran ini
Tugasan
Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang sahih. Untuk maklumat penting, terjemahan profesional oleh manusia adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.


