├── Week1 ├── .ipynb_checkpoints │ ├── DescendingIntoML-checkpoint.ipynb │ ├── Framing-checkpoint.ipynb │ ├── RedLossAndTF-checkpoint.ipynb │ └── TrainTestValidation-checkpoint.ipynb ├── DescendingIntoML.ipynb ├── Framing.ipynb ├── RedLossAndTF.ipynb ├── TrainTestValidation.ipynb └── images │ ├── .ipynb_checkpoints │ └── regression-checkpoint.png │ ├── equation1.png │ ├── equation2.png │ ├── examples.png │ ├── feature-label.png │ ├── linear1.png │ ├── linear2.png │ ├── regression.png │ ├── trainandtest.png │ ├── valitest.png │ ├── valitest2.png │ └── valitest3.png ├── Week2 ├── .ipynb_checkpoints │ ├── FeatureCrosses-checkpoint.ipynb │ ├── LogisticRegression-checkpoint.ipynb │ ├── Regularization-checkpoint.ipynb │ ├── Representation-checkpoint.ipynb │ └── o5-checkpoint.png ├── FeatureCrosses.ipynb ├── LogisticRegression.ipynb ├── Regularization.ipynb ├── Representation.ipynb └── images │ ├── 02.png │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── f1.png │ ├── f2.png │ ├── lr1.png │ ├── lr2.png │ ├── o1.png │ ├── o3.png │ ├── o4.png │ ├── o5.png │ ├── overfitting.png │ ├── reg1.png │ └── reg2.png ├── Week3 ├── .ipynb_checkpoints │ ├── Classification-checkpoint.ipynb │ ├── L1_regularization-checkpoint.ipynb │ ├── MultiClassNets-checkpoint.ipynb │ ├── NeuralNetsColab-checkpoint.ipynb │ └── Neuralnetworks-checkpoint.ipynb ├── Classification.ipynb ├── L1_regularization.ipynb ├── MultiClassNets.ipynb ├── NeuralNetsColab.ipynb ├── Neuralnetworks.ipynb └── images │ ├── .ipynb_checkpoints │ ├── nn2-checkpoint.png │ ├── nn3-checkpoint.png │ ├── nn4-checkpoint.png │ └── perceptron-checkpoint.png │ ├── Actual.png │ ├── F-Score.png │ ├── OnevsAll.png │ ├── Precision.png │ ├── Recall.png │ ├── Softmax.png │ ├── TFPN.png │ ├── TFPN2.png │ ├── accuracy.png │ ├── allinone.png │ ├── l1vsl2.png │ ├── nn1.png │ ├── nn2.png │ ├── nn3.png │ ├── nn4.png │ └── perceptron.png ├── Week4 ├── .ipynb_checkpoints │ ├── Embeddings-checkpoint.ipynb │ ├── Fairness-checkpoint.ipynb │ └── StaticDynamicVeDataDep-checkpoint.ipynb ├── Embeddings.ipynb ├── Fairness.ipynb ├── StaticDynamicVeDataDep.ipynb └── images │ ├── 1D.png │ ├── 2D.png │ ├── EmbeddingsNN.png │ ├── EmbeddingsWeight.png │ └── bookEmbedding.png ├── readme.MD └── readmeSample.ipynb /Week1/.ipynb_checkpoints/DescendingIntoML-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Descending into ML" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "### Linear Regression\n", 22 | "\n", 23 | "Lineer Regresyonda modelimiz eğitim setindeki verilerimiz üzerinde doğrusal bir ilişki yakalamaya çalışmaktadır. Aşağıdaki resimleri incelediğimizde bunu daha iyi anlayacağız. \n", 24 | "\n", 25 | "![lin1](images/linear1.png)\n", 26 | "\n", 27 | "![lin2](images/linear2.png)\n", 28 | "\n", 29 | "\n", 30 | "Yukarıdaki doğrusal çizgi bizim modelimiz. Verileri gözlemledi ve olabildiğince her birine yakın durmaya çalıştı ve bir doğrusallık yakalayabildi.\n", 31 | "\n", 32 | "Bu ilişkiyi matematiksel olarak şu şekilde yazabiliriz. \n", 33 | "\n", 34 | "y = mx + b\n", 35 | "\n", 36 | "- y : elde etmeye çalıştığımız tahmin değerimiz\n", 37 | "- m : eğim\n", 38 | "- b : y kesme noktası\n", 39 | "\n", 40 | "ML de ise bu eşitiği şu şekilde yazıyoruz:\n", 41 | "\n", 42 | "![equ1](images/equation1.png)\n", 43 | "\n", 44 | "- y(üs) : etiket ( label )\n", 45 | "- b : bias (y kesişim )\n", 46 | "- w bizim ağrılık değerimiz - eğim\n", 47 | "- x : özellik ( feature )\n", 48 | "\n", 49 | "\n", 50 | "Eğer birden fazla özeliğimiz var ise birden fazla ağırlığımız olacaktır. İleride kullanacağız, bir denklem örneğini aşağıya bırakıyorum.\n", 51 | "\n", 52 | "![equ2](images/equation2.png)\n" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "### Trainin & Loss \n", 60 | "\n", 61 | "Bu konunun çok iyi anlaşılması gerektiğini düşünüyorum. Bu video bana çok yardımcı olmuştu.[Clearly Explained - StatQuest](https://www.youtube.com/watch?v=sDv4f4s2SB8)" 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "Ek kaynaklar: \n", 69 | "\n", 70 | "- [ Course Original Link ](https://developers.google.com/machine-learning/crash-course/descending-into-ml/linear-regression)\n", 71 | "- [ Course Original Link ](https://developers.google.com/machine-learning/crash-course/descending-into-ml/training-and-loss)\n", 72 | "- [ Linear Regression Nedir ? ](https://medium.com/@ekrem.hatipoglu/machine-learning-prediction-algorithms-linear-regression-part-2-7011eff18f5)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "**_Enes Çavuş_**" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [] 86 | } 87 | ], 88 | "metadata": { 89 | "kernelspec": { 90 | "display_name": "Python 3", 91 | "language": "python", 92 | "name": "python3" 93 | }, 94 | "language_info": { 95 | "codemirror_mode": { 96 | "name": "ipython", 97 | "version": 3 98 | }, 99 | "file_extension": ".py", 100 | "mimetype": "text/x-python", 101 | "name": "python", 102 | "nbconvert_exporter": "python", 103 | "pygments_lexer": "ipython3", 104 | "version": "3.7.6" 105 | } 106 | }, 107 | "nbformat": 4, 108 | "nbformat_minor": 4 109 | } 110 | -------------------------------------------------------------------------------- /Week1/.ipynb_checkpoints/Framing-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Framing" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Makine öğrenmesine giriş yaptığımız bu konuyu ne kadar iyi anlarsak ilk haftamız o kadar verimli geçecektir çünkü temel kavramları bu konuda öğreneceğiz.\n", 22 | "\n", 23 | "Öncelikle supervised ( gözetimli ) makine öğrenmesi nedir onunla başlayalım.\n", 24 | "\n", 25 | "Supervised Learning:\n", 26 | "\n", 27 | "Eğer vereceğimiz girdilere karşılık hangi çıktıyı elde edeceğimizi algoritmamıza / makineye söylüyorsak bu gözetimli öğrenmedir.\n", 28 | "\n", 29 | "\n", 30 | "\n", 31 | "Girdi ve çıktı kavramlarını daha iyi anlamak için **feature ( özellik )** ve **label ( etiket )** terimlerini bir örnek ile inceleyelim.\n", 32 | "\n", 33 | "Elimizde bir evin değerini bulan modelimiz olsun. Modelimiz evin değerini bulmak için \n", 34 | "\n", 35 | "- toplam oda sayısı ( feature )\n", 36 | "- metrekare ( feature )\n", 37 | "- konum ( feature )\n", 38 | "- kaç yıllık ( feature )\n", 39 | "\n", 40 | "gibi bilgileri kullanacak. Bunları modelimize veriyoruz, aynı zamanda eğitim veri setimize verdiğimiz bu değerlere karşılık her ev için \"evin değerini\" ( label ) veriyoruz. Bunları bir arada kullandığımızda \"örnek\" elde etmiş oluyoruz.\n", 41 | "\n", 42 | "![example](images/examples.png)\n" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "Peki model nedir? \n", 50 | "\n", 51 | "Yukarıda bahsetmiş olduğumuz eğitim bilgilerini ( features - labels) kullanarak bu bilgiler arasında bir ilişki bulmaya model oluşturma (eğitim) diyoruz. \n", 52 | "\n", 53 | "- Eğitim: Bu aşamada modelimiz, etiketlenmiş örnekleri alıp bunlar arasında bir ilişki yakalamaya çalışmaktadır.\n", 54 | "\n", 55 | "- Sonuç çıkarma: Bu kez eğitmiş olduğumuz modele sadece özellikler veriyoruz ve bunları kullanarak evimizin değeri hakkında bir tahminde bulunmasını bekliyoruz. Burada dikkat etmemiz gereken kısım, label ( etiket ) kullanmıyoruz, modelimiz tahmin ediyor." 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "### Regresyon vs Sınıflandırma" 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "**Regresyonda** modelimiz sürekli veriler üzerinde tahminde bulunur. Numeric çıktılar elde ederiz.\n", 70 | "Örneğin:\n", 71 | "\n", 72 | "- Sakarya'da bir evin değeri nedir?\n", 73 | "- Bir kullanıcının bir reklama tıklama olasılığı nedir?\n", 74 | "\n", 75 | "![regression](images/regression.png)\n", 76 | "\n", 77 | "**Sınıflandırmada** modelimiz ayrık veriler üzerinde tahminde bulunur. Yani kategorik çıktılar elde ederiz:\n", 78 | "Örneğin:\n", 79 | "\n", 80 | "- Bu mail spam mi, spam değil mi?\n", 81 | "- Bu fotoğraftaki bir kedi mi, yoksa bir köpek mi?\n", 82 | "\n", 83 | "\n" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "Ek kaynaklar:\n", 91 | "\n", 92 | "- [Course original link](https://developers.google.com/machine-learning/crash-course/framing/ml-terminology)\n", 93 | "\n", 94 | "- [Supervised Learning](https://medium.com/algorithms-data-structures/makine-%C3%B6%C4%9Frenmesi-supervised-vs-unsupervised-learning-299b8c639a01)" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "**_Enes Çavuş_**" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [] 108 | } 109 | ], 110 | "metadata": { 111 | "kernelspec": { 112 | "display_name": "Python 3", 113 | "language": "python", 114 | "name": "python3" 115 | }, 116 | "language_info": { 117 | "codemirror_mode": { 118 | "name": "ipython", 119 | "version": 3 120 | }, 121 | "file_extension": ".py", 122 | "mimetype": "text/x-python", 123 | "name": "python", 124 | "nbconvert_exporter": "python", 125 | "pygments_lexer": "ipython3", 126 | "version": "3.7.6" 127 | } 128 | }, 129 | "nbformat": 4, 130 | "nbformat_minor": 4 131 | } 132 | -------------------------------------------------------------------------------- /Week1/.ipynb_checkpoints/RedLossAndTF-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Reducing Loss with Tensorflow Exercise" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Model eğitminde kullanılan hiperparametrelerin optimum değerlerinin bulunması." 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Bence bilgisayar bilimlerinin temelinde **( divide and conquer ) _böl ve yönet_** ilkesi yatar. Eğer çok büyük bir projeyi ekip çalışması yapmadan, planlayıp parçalamadan (kitap - [**Scrum - Agile**](https://www.amazon.com.tr/Scrum-Kat%C4%B1-Zamanda-Yapma-Sanat%C4%B1/dp/6058487471/ref=asc_df_6058487471/?tag=googleshoptr-21&linkCode=df0&hvadid=344882438061&hvpos=&hvnetw=g&hvrand=4972712707744752112&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9056855&hvtargid=pla-713402970464&psc=1) ), iş bölümü yapmadan sizce başarıyla tamamlama olasılığınız nedir? Yoktur. Bunu her alanda uygulayabiliriz ama şimdilik bu ilk haftanın konuları üzerine yoğunlaşalım.\n", 29 | "\n", 30 | "Tabii ki tüm konular çok önemli ama bu haftayı dörde böldüm:\n", 31 | "+ Feature ve label kavramlarını anlama\n", 32 | "+ Loss yönetimine hakimiyeti artırma\n", 33 | "+ Laerning rate, batch, epoch hiperparametrelerini anlama\n", 34 | "+ Veriyi yönetme ve overfitting gibi olası problemlerden kaçınma ( Train - Validation - Test ) Bu kısma bu notebook üzerinde değinilmemiştir.\n", 35 | "\n", 36 | "\n", 37 | "**Note:** Bu yazdıklarım genel hatırlatma amaçlıdır. Arada girip göz atabileceğiniz CheatSheet. Detaya inmeden sadece genel bir bakış.\n" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": null, 43 | "metadata": {}, 44 | "outputs": [], 45 | "source": [ 46 | "#@title Run this Colab on TensorFlow 2.x # bu kısımda colab üzerinde kullanacağımız tensorflow sürümü seçini yapılmaktadır. Pek bi önemi yok şu anda\n", 47 | "%tensorflow_version 2.x" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": null, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "import pandas as pd # pandas veriyi analiz edebilmek için vazgeçilmez bir kütüphane. Bence ilk 10 da belki de 5\n", 57 | "import tensorflow as tf\n", 58 | "from matplotlib import pyplot as plt # matplotlib veriyi görselleştirmede öncü, bilmeyenler için seaborn'u da araştırabilirsiniz." 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "Sıradaki kodumuz model tanımlama işlemlerini içermektedir ve şu anda odağımızda değildir. Geçiniz! " 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": {}, 72 | "outputs": [], 73 | "source": [ 74 | "#@title Define the functions that build and train a model\n", 75 | "def build_model(my_learning_rate):\n", 76 | " \"\"\"Create and compile a simple linear regression model.\"\"\"\n", 77 | " # Most simple tf.keras models are sequential. \n", 78 | " # A sequential model contains one or more layers.\n", 79 | " model = tf.keras.models.Sequential()\n", 80 | "\n", 81 | " # Describe the topography of the model.\n", 82 | " # The topography of a simple linear regression model\n", 83 | " # is a single node in a single layer. \n", 84 | " model.add(tf.keras.layers.Dense(units=1, \n", 85 | " input_shape=(1,)))\n", 86 | "\n", 87 | " # Compile the model topography into code that \n", 88 | " # TensorFlow can efficiently execute. Configure \n", 89 | " # training to minimize the model's mean squared error. \n", 90 | " model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=my_learning_rate),\n", 91 | " loss=\"mean_squared_error\",\n", 92 | " metrics=[tf.keras.metrics.RootMeanSquaredError()])\n", 93 | "\n", 94 | " return model \n", 95 | "\n", 96 | "\n", 97 | "def train_model(model, feature, label, epochs, batch_size):\n", 98 | " \"\"\"Train the model by feeding it data.\"\"\"\n", 99 | "\n", 100 | " # Feed the feature values and the label values to the \n", 101 | " # model. The model will train for the specified number \n", 102 | " # of epochs, gradually learning how the feature values\n", 103 | " # relate to the label values. \n", 104 | " history = model.fit(x=feature,\n", 105 | " y=label,\n", 106 | " batch_size=None,\n", 107 | " epochs=epochs)\n", 108 | "\n", 109 | " # Gather the trained model's weight and bias.\n", 110 | " trained_weight = model.get_weights()[0]\n", 111 | " trained_bias = model.get_weights()[1]\n", 112 | "\n", 113 | " # The list of epochs is stored separately from the \n", 114 | " # rest of history.\n", 115 | " epochs = history.epoch\n", 116 | " \n", 117 | " # Gather the history (a snapshot) of each epoch.\n", 118 | " hist = pd.DataFrame(history.history)\n", 119 | "\n", 120 | " # Specifically gather the model's root mean \n", 121 | " #squared error at each epoch. \n", 122 | " rmse = hist[\"root_mean_squared_error\"]\n", 123 | "\n", 124 | " return trained_weight, trained_bias, epochs, rmse\n", 125 | "\n", 126 | "print(\"Defined create_model and train_model\")" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": {}, 132 | "source": [ 133 | "\n", 134 | "Aşağıdaki kod, görselleştirme araçlarınn kulanılmasını sağlamakta ve yine bununla şimdilik işimiz yok. Evet veri görselleştirme ve veriyi analiz etme makine öğrenmesinin temelleri ama odak noktamız daha çok model eğitiminin teorik temelleri ve belli başlı parametrelere aşinalık kazanmamız. Bu yüzden bu kodu da geçelim.\n" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": null, 140 | "metadata": {}, 141 | "outputs": [], 142 | "source": [ 143 | "#@title Define the plotting functions\n", 144 | "def plot_the_model(trained_weight, trained_bias, feature, label):\n", 145 | " \"\"\"Plot the trained model against the training feature and label.\"\"\"\n", 146 | "\n", 147 | " # Label the axes.\n", 148 | " plt.xlabel(\"feature\")\n", 149 | " plt.ylabel(\"label\")\n", 150 | "\n", 151 | " # Plot the feature values vs. label values.\n", 152 | " plt.scatter(feature, label)\n", 153 | "\n", 154 | " # Create a red line representing the model. The red line starts\n", 155 | " # at coordinates (x0, y0) and ends at coordinates (x1, y1).\n", 156 | " x0 = 0\n", 157 | " y0 = trained_bias\n", 158 | " x1 = my_feature[-1]\n", 159 | " y1 = trained_bias + (trained_weight * x1)\n", 160 | " plt.plot([x0, x1], [y0, y1], c='r')\n", 161 | "\n", 162 | " # Render the scatter plot and the red line.\n", 163 | " plt.show()\n", 164 | "\n", 165 | "def plot_the_loss_curve(epochs, rmse):\n", 166 | " \"\"\"Plot the loss curve, which shows loss vs. epoch.\"\"\"\n", 167 | "\n", 168 | " plt.figure()\n", 169 | " plt.xlabel(\"Epoch\")\n", 170 | " plt.ylabel(\"Root Mean Squared Error\")\n", 171 | "\n", 172 | " plt.plot(epochs, rmse, label=\"Loss\")\n", 173 | " plt.legend()\n", 174 | " plt.ylim([rmse.min()*0.97, rmse.max()])\n", 175 | " plt.show()\n", 176 | "\n", 177 | "print(\"Defined the plot_the_model and plot_the_loss_curve functions.\")" 178 | ] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": {}, 183 | "source": [ 184 | "Elimizde bir veri olmadan model eğitemeyeceğimize göre. Şimdi Regresyon problemine uygun verimizi ve label değerlerini aşağıda görmekteyiz. Yeri gelmişken label ve feature kavramlarını biraz daha yakından inceleyelim." 185 | ] 186 | }, 187 | { 188 | "cell_type": "markdown", 189 | "metadata": {}, 190 | "source": [ 191 | "## Feature\n", 192 | " - Bizler modelimizi eğitirken ona bilgi vermekteyiz. Şu özellikleri al ve bunlardan bi çıkarım yap. Örneğin kurstaki ev örneğini alalım. Bi evin özellikleri neler olabilir : Kaç odalı? Kaç metrekare? Kaç banyosu var? Göl manzaralı mı? . Bunlar bizim modelimize vereceğimiz özellikler olacak. Peki bunları nasıl yorumlayacak bu model? İşte burada label ( etiket ) devreye giriyor.\n", 193 | " \n", 194 | "## Label\n", 195 | " - Şu cümleye geri dönelim -> _Şu özellikleri al ve bunlardan bir çıkarım yap_. Nasıl bir çıkarım yapacağını söyledik mi? Hayır. Bunu söylemek için label kullanıyoruz. Ekteki resime bakıldığında buradaki feature ve label değerleri görülmekte. Biz modelimize oda sayılarını vb veriyoruz ayrıca ek olarak ona bu özelliklere sahip bi evin değeri şu olur diyerek label'lama işlemini de yapmış oluyoruz. Oldukça anlaşılır dimi? Yine de bir örnek verelim.\n", 196 | "\n", 197 | "## Örnek\n", 198 | " Bir evimiz var ve bunun 4 odası, 2 banyosu, bahçesi var ve 150 metrekare ( bunlar özelliklerimizdi ) , değeri ise $260.000 (bu label).\n", 199 | " Bir evimiz var ve bunun 3 odası, 1 banyosu, bahçe yok, ve 120 metrekare (bunlar özelliklerimizdi ), değeri ise #130.000 (bu label)\n", 200 | " \n", 201 | " Bu bilgilerden milyonlarca olduğunu düşünün. Sizce bir evin bahçesi varsa değerinin artacağını modelimiz öğrenemez mi? Ya da banyo sayısının artması ile fiyatın arasında bir oran orantı yakalayamaz mı?\n", 202 | "\n", 203 | "\n", 204 | "![test image](images/feature-label.png)" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": null, 210 | "metadata": {}, 211 | "outputs": [], 212 | "source": [ 213 | "my_feature = ([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0])\n", 214 | "my_label = ([5.0, 8.8, 9.6, 14.2, 18.8, 19.5, 21.4, 26.8, 28.9, 32.0, 33.8, 38.2])" 215 | ] 216 | }, 217 | { 218 | "cell_type": "markdown", 219 | "metadata": {}, 220 | "source": [ 221 | "### Verimizi aldığımıza göre modelimizin hiperparametrelerine bi göz atalım.\n", 222 | "\n", 223 | "+ **Learning Rate :** learning rate kısaca verimiz üzerinde nasıl gezineceğimizi belirler. Verimizi yorumlarken düşük bir loss değerine erişmek iyidir fakat learning rate i çok küçük alırsanız ömür boyu erişemeyebilirsiniz. Ya da çok büyük alırsanız hedefimizin üzerinden atlar ve çok farklı konumlara şıçrayabilirsiniz.\n", 224 | " \n", 225 | "+ **Batch Size:** gerçek hayatta veri setlerimiz çok büyük ve bunu bir kerede modele verip yorumlamasını istememiz hatta bunu sürekli yaptırmamız belki de imkansız ya da zaman alır. Bunu önlemek için modelimize parça parça veri veriyoruz. Örneği: 1000 veriniz var batch size ise 100 seçtiniz, işte bu şekilde 10 tura tamamen verimiz modelden geçmiş olacaktır.Tur demişken ...\n", 226 | "\n", 227 | "+ **Epoch :** Tur dediğimiz şey aslında iterasyon sayısı. Örneğimizde bu 10 du. Peki bu 10 turun ( iterasyonun ) tamamlanması için geçen zamana ne deniyor? Epoch." 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": null, 233 | "metadata": {}, 234 | "outputs": [], 235 | "source": [ 236 | "learning_rate=0.01\n", 237 | "epochs=10\n", 238 | "my_batch_size=12\n", 239 | "\n", 240 | "my_model = build_model(learning_rate)\n", 241 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 242 | " my_label, epochs,\n", 243 | " my_batch_size)\n", 244 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 245 | "plot_the_loss_curve(epochs, rmse)" 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": {}, 251 | "source": [ 252 | "Bu kısımda epoch hparametresini yorumlamamız istenmiş. Artırabiliriz, Aşırıya kaçmayalım çünkü overfitting hiç istemediğimiz bişey!" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": null, 258 | "metadata": {}, 259 | "outputs": [], 260 | "source": [ 261 | "learning_rate=0.01\n", 262 | "epochs= ? # Replace ? with an integer.\n", 263 | "my_batch_size=12\n", 264 | "\n", 265 | "my_model = build_model(learning_rate)\n", 266 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 267 | " my_label, epochs,\n", 268 | " my_batch_size)\n", 269 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 270 | "plot_the_loss_curve(epochs, rmse)" 271 | ] 272 | }, 273 | { 274 | "cell_type": "markdown", 275 | "metadata": {}, 276 | "source": [ 277 | "Bu kısımda learning rate'i yorumlamamız istenmiş. Yukarıda da açıklamıştım: Ne çok yüksek ne de çok düşük değerler vermeyelim, aşırıya kaçmadan orta yolu bulmamız kâfi." 278 | ] 279 | }, 280 | { 281 | "cell_type": "code", 282 | "execution_count": null, 283 | "metadata": {}, 284 | "outputs": [], 285 | "source": [ 286 | "# Increase the learning rate and decrease the number of epochs.\n", 287 | "learning_rate=100 \n", 288 | "epochs=500 \n", 289 | "\n", 290 | "my_model = build_model(learning_rate)\n", 291 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 292 | " my_label, epochs,\n", 293 | " my_batch_size)\n", 294 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 295 | "plot_the_loss_curve(epochs, rmse)" 296 | ] 297 | }, 298 | { 299 | "cell_type": "markdown", 300 | "metadata": {}, 301 | "source": [ 302 | "Burada ikisinide yorumlamamız istenmiş. Eğer learning rate küçülürse epoch'un artması işimize yarayabilir. Ya da tam tersi: learning rate büyürse epoch azalsa iyi olur.\n", 303 | "\n", 304 | "Optimumu bulmak için sürekli denemeler yapmamız gerekebilir. Ve kötü yanı, hiçbir zaman net bi değer yoktur. Bu parametreler veri setlerine özgü belirlenmeli. En garanti yol bu!" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": null, 310 | "metadata": {}, 311 | "outputs": [], 312 | "source": [ 313 | "# Set the learning rate and number of epochs\n", 314 | "learning_rate= ? # Replace ? with a floating-point number\n", 315 | "epochs= ? # Replace ? with an integer\n", 316 | "\n", 317 | "my_model = build_model(learning_rate)\n", 318 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 319 | " my_label, epochs,\n", 320 | " my_batch_size)\n", 321 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 322 | "plot_the_loss_curve(epochs, rmse)" 323 | ] 324 | }, 325 | { 326 | "cell_type": "markdown", 327 | "metadata": {}, 328 | "source": [ 329 | "Bu örnekte batch_size'ın öneminin anlaşılamayacağını düşünüyorum. Daha büyük veri setlerinde farklı kombinasyonlarda görüşmek üzere." 330 | ] 331 | }, 332 | { 333 | "cell_type": "markdown", 334 | "metadata": {}, 335 | "source": [ 336 | "Ek Kaynaklar:\n", 337 | "\n", 338 | "- [Google Original Link](https://developers.google.com/machine-learning/crash-course/reducing-loss/video-lecture)\n", 339 | "- [Tensorflow Exercise](https://developers.google.com/machine-learning/crash-course/first-steps-with-tensorflow/programming-exercises)" 340 | ] 341 | }, 342 | { 343 | "cell_type": "markdown", 344 | "metadata": {}, 345 | "source": [ 346 | "**_Enes Çavuş_ - ML** " 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": null, 352 | "metadata": {}, 353 | "outputs": [], 354 | "source": [] 355 | } 356 | ], 357 | "metadata": { 358 | "kernelspec": { 359 | "display_name": "Python 3", 360 | "language": "python", 361 | "name": "python3" 362 | }, 363 | "language_info": { 364 | "codemirror_mode": { 365 | "name": "ipython", 366 | "version": 3 367 | }, 368 | "file_extension": ".py", 369 | "mimetype": "text/x-python", 370 | "name": "python", 371 | "nbconvert_exporter": "python", 372 | "pygments_lexer": "ipython3", 373 | "version": "3.7.6" 374 | } 375 | }, 376 | "nbformat": 4, 377 | "nbformat_minor": 4 378 | } 379 | -------------------------------------------------------------------------------- /Week1/.ipynb_checkpoints/TrainTestValidation-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Train And Test Sets\n", 8 | "\n", 9 | "---" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "Modelimizin loss değeri ne kadar az ise o kadar iyi diyebiliriz fakat şöyle bir durum var modelimiz veri setimizi ezberlemiş olabiliri! Buna **overfitting** diyoruz. Yani modelimiz eğitim aşamasında çok güzel tahminlerde bulunuyor fakat modelimize daha önce görmediği, eğitim setinde bulunmayan bir veri verdiğimizde bize yanlış tahminlerde bulunuyor ise overfitting durumuna gelmiştir diyoruz. \n", 17 | "\n", 18 | "Bunun önüne geçebilmek için verimizi iki parçaya bölüyoruz \n", 19 | "\n", 20 | "- **Train** data . ( modelimiz kendini bu verileri kullanarak eğitecek )\n", 21 | "- **Test** data : ( tahminlerini kontrol etmek için test seti üzerinde de denemeler yapacak ) \n", 22 | "\n", 23 | "![trainandtest](images/trainandtest.png)\n", 24 | "\n", 25 | "Verimizin ne kadarını test ne kadarını train olarak kullanacağız?\n", 26 | "\n", 27 | "Bu konuda çeşitli öneriler olsa da yeni başlayanlar için projelerinde %20 test civarında pratik yapmaları iyi olacaktır. Daha sonra tecrübeleriniz arttıkça ve veri setlerinizi tanıdıkça kendiniz bu değerleri belirleyebileceksiniz. Örneğin ben bir görüntü işleme projesinde %15 test %85 train oranında güzel tahminler elde etmiştim. Ama her konuda olduğu gibi bu da **data dependent** yani verinize göre değişir. Kullandığım fotoğrafların kaliteleri değiştiğinde yüzdeler üzerinde oynamam gerektiği de oldu.\n", 28 | "\n", 29 | "\n", 30 | "\n", 31 | "Bu örneklerden sonra bir diğer problem olan **test setimiz üzerindeki overfitting'e** deyineceğiz. Bu nasıl oluyor?\n", 32 | "\n", 33 | "Modeliniz train set üzerinde ezberleme yapabildiği gibi aynı zamanda test set üzerinde de ezberleme yapabilir? Tahminlerini test setinde kontrol ederken bu kez ağırlıklarını test setine göre ayarlamaya başlayabilir. Bunu çözmek için ne yapıyoruz. Veri setimizi ikiye değil üçe bölüyoruz. Üçüncüsü ise **Validation Set**\n" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "---" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "# Validation Set" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "---" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "Farkı anlamamız için aşağıdaki resimleri inceleyelim. \n", 62 | "\n", 63 | "![valitest](images/valitest.png)\n", 64 | "\n", 65 | "Görüldüğü üzere modelimizi train - test setleri ile eğittiğimizde en iyi modeli seçiyoruz ve gerçek dünyaya alıyoruz. Test seti üzerinde bir overfitting söz konusu mu değil mi bilmiyoruz. \n", 66 | "\n", 67 | "Birde şu resimlere bakalım. \n", 68 | "\n", 69 | "Bu kez üçe böldük ve verimizin büyük bir kısmını train seti, bir kısmını validation set, bir kısmını test set olarak ayırdık.\n", 70 | "\n", 71 | "Modelimizin şimdi yapacağı iş train seti üzerinde denemeler yapacak ve validation üzerinde doğrulamalar yapacak. \n", 72 | "\n", 73 | "![valitest2](images/valitest2.png)\n", 74 | "\n", 75 | "![valitest3](images/valitest3.png)\n", 76 | "\n", 77 | "Bir önceki konuda olduğu gibi ama bir fark var: test seti değil validation seti üzerinde denemeler yapıyor. \n", 78 | "\n", 79 | "Eğitim tamamlandıktan sonra modelimizi gerçek dünyaya alıyoruz ve ayırmış olduğumuz test seti üzerinde denemelerde bulunuyoruz. \n", 80 | "\n", 81 | "Burada, modelimiz validation test üzerinde overfitting yapmış mı yoksa yapmamış mı anlayabiliyoruz. Yani overfitting'den bir basamak daha uzaklaşmış olduk. \n", 82 | "\n" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "Ek olarak train - test mantığının daha iyi anlaşılabileceğini düşündüğüm cross validation konusunu da buraya kaynak olarak eklemek istiyorum. Araştırılabilir ...\n", 90 | "\n", 91 | "- [Cross Validation](https://www.youtube.com/watch?v=fSytzGwwBVw)\n", 92 | "\n" 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "Ek Kaynaklar:\n", 100 | "\n", 101 | "- [Google Original Link - Train & Test](https://developers.google.com/machine-learning/crash-course/training-and-test-sets/splitting-data)\n", 102 | "- [Google Original Link - Validation ](https://developers.google.com/machine-learning/crash-course/validation/another-partition)\n" 103 | ] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": {}, 108 | "source": [ 109 | "**_Enes Çavuş_**" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": {}, 116 | "outputs": [], 117 | "source": [] 118 | } 119 | ], 120 | "metadata": { 121 | "kernelspec": { 122 | "display_name": "Python 3", 123 | "language": "python", 124 | "name": "python3" 125 | }, 126 | "language_info": { 127 | "codemirror_mode": { 128 | "name": "ipython", 129 | "version": 3 130 | }, 131 | "file_extension": ".py", 132 | "mimetype": "text/x-python", 133 | "name": "python", 134 | "nbconvert_exporter": "python", 135 | "pygments_lexer": "ipython3", 136 | "version": "3.7.6" 137 | } 138 | }, 139 | "nbformat": 4, 140 | "nbformat_minor": 4 141 | } 142 | -------------------------------------------------------------------------------- /Week1/DescendingIntoML.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Descending into ML" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "### Linear Regression\n", 22 | "\n", 23 | "Lineer Regresyonda modelimiz eğitim setindeki verilerimiz üzerinde doğrusal bir ilişki yakalamaya çalışmaktadır. Aşağıdaki resimleri incelediğimizde bunu daha iyi anlayacağız. \n", 24 | "\n", 25 | "![lin1](images/linear1.png)\n", 26 | "\n", 27 | "![lin2](images/linear2.png)\n", 28 | "\n", 29 | "\n", 30 | "Yukarıdaki doğrusal çizgi bizim modelimiz. Verileri gözlemledi ve olabildiğince her birine yakın durmaya çalıştı ve bir doğrusallık yakalayabildi.\n", 31 | "\n", 32 | "Bu ilişkiyi matematiksel olarak şu şekilde yazabiliriz. \n", 33 | "\n", 34 | "y = mx + b\n", 35 | "\n", 36 | "- y : elde etmeye çalıştığımız tahmin değerimiz\n", 37 | "- m : eğim\n", 38 | "- b : y kesme noktası\n", 39 | "\n", 40 | "ML de ise bu eşitiği şu şekilde yazıyoruz:\n", 41 | "\n", 42 | "![equ1](images/equation1.png)\n", 43 | "\n", 44 | "- y(üs) : etiket ( label )\n", 45 | "- b : bias (y kesişim )\n", 46 | "- w bizim ağrılık değerimiz - eğim\n", 47 | "- x : özellik ( feature )\n", 48 | "\n", 49 | "\n", 50 | "Eğer birden fazla özeliğimiz var ise birden fazla ağırlığımız olacaktır. İleride kullanacağız, bir denklem örneğini aşağıya bırakıyorum.\n", 51 | "\n", 52 | "![equ2](images/equation2.png)\n" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "### Trainin & Loss \n", 60 | "\n", 61 | "Bu konunun çok iyi anlaşılması gerektiğini düşünüyorum. Bu video bana çok yardımcı olmuştu.[Clearly Explained - StatQuest](https://www.youtube.com/watch?v=sDv4f4s2SB8)" 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "Ek kaynaklar: \n", 69 | "\n", 70 | "- [ Course Original Link ](https://developers.google.com/machine-learning/crash-course/descending-into-ml/linear-regression)\n", 71 | "- [ Course Original Link ](https://developers.google.com/machine-learning/crash-course/descending-into-ml/training-and-loss)\n", 72 | "- [ Linear Regression Nedir ? ](https://medium.com/@ekrem.hatipoglu/machine-learning-prediction-algorithms-linear-regression-part-2-7011eff18f5)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "**_Enes Çavuş_**" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [] 86 | } 87 | ], 88 | "metadata": { 89 | "kernelspec": { 90 | "display_name": "Python 3", 91 | "language": "python", 92 | "name": "python3" 93 | }, 94 | "language_info": { 95 | "codemirror_mode": { 96 | "name": "ipython", 97 | "version": 3 98 | }, 99 | "file_extension": ".py", 100 | "mimetype": "text/x-python", 101 | "name": "python", 102 | "nbconvert_exporter": "python", 103 | "pygments_lexer": "ipython3", 104 | "version": "3.7.6" 105 | } 106 | }, 107 | "nbformat": 4, 108 | "nbformat_minor": 4 109 | } 110 | -------------------------------------------------------------------------------- /Week1/Framing.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Framing" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Makine öğrenmesine giriş yaptığımız bu konuyu ne kadar iyi anlarsak ilk haftamız o kadar verimli geçecektir çünkü temel kavramları bu konuda öğreneceğiz.\n", 22 | "\n", 23 | "Öncelikle supervised ( gözetimli ) makine öğrenmesi nedir onunla başlayalım.\n", 24 | "\n", 25 | "Supervised Learning:\n", 26 | "\n", 27 | "Eğer vereceğimiz girdilere karşılık hangi çıktıyı elde edeceğimizi algoritmamıza / makineye söylüyorsak bu gözetimli öğrenmedir.\n", 28 | "\n", 29 | "\n", 30 | "\n", 31 | "Girdi ve çıktı kavramlarını daha iyi anlamak için **feature ( özellik )** ve **label ( etiket )** terimlerini bir örnek ile inceleyelim.\n", 32 | "\n", 33 | "Elimizde bir evin değerini bulan modelimiz olsun. Modelimiz evin değerini bulmak için \n", 34 | "\n", 35 | "- toplam oda sayısı ( feature )\n", 36 | "- metrekare ( feature )\n", 37 | "- konum ( feature )\n", 38 | "- kaç yıllık ( feature )\n", 39 | "\n", 40 | "gibi bilgileri kullanacak. Bunları modelimize veriyoruz, aynı zamanda eğitim veri setimize verdiğimiz bu değerlere karşılık her ev için \"evin değerini\" ( label ) veriyoruz. Bunları bir arada kullandığımızda \"örnek\" elde etmiş oluyoruz.\n", 41 | "\n", 42 | "![example](images/examples.png)\n" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "Peki model nedir? \n", 50 | "\n", 51 | "Yukarıda bahsetmiş olduğumuz eğitim bilgilerini ( features - labels) kullanarak bu bilgiler arasında bir ilişki bulmaya model oluşturma (eğitim) diyoruz. \n", 52 | "\n", 53 | "- Eğitim: Bu aşamada modelimiz, etiketlenmiş örnekleri alıp bunlar arasında bir ilişki yakalamaya çalışmaktadır.\n", 54 | "\n", 55 | "- Sonuç çıkarma: Bu kez eğitmiş olduğumuz modele sadece özellikler veriyoruz ve bunları kullanarak evimizin değeri hakkında bir tahminde bulunmasını bekliyoruz. Burada dikkat etmemiz gereken kısım, label ( etiket ) kullanmıyoruz, modelimiz tahmin ediyor." 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "### Regresyon vs Sınıflandırma" 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "**Regresyonda** modelimiz sürekli veriler üzerinde tahminde bulunur. Numeric çıktılar elde ederiz.\n", 70 | "Örneğin:\n", 71 | "\n", 72 | "- Sakarya'da bir evin değeri nedir?\n", 73 | "- Bir kullanıcının bir reklama tıklama olasılığı nedir?\n", 74 | "\n", 75 | "![regression](images/regression.png)\n", 76 | "\n", 77 | "**Sınıflandırmada** modelimiz ayrık veriler üzerinde tahminde bulunur. Yani kategorik çıktılar elde ederiz:\n", 78 | "Örneğin:\n", 79 | "\n", 80 | "- Bu mail spam mi, spam değil mi?\n", 81 | "- Bu fotoğraftaki bir kedi mi, yoksa bir köpek mi?\n", 82 | "\n", 83 | "\n" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "Ek kaynaklar:\n", 91 | "\n", 92 | "- [Course original link](https://developers.google.com/machine-learning/crash-course/framing/ml-terminology)\n", 93 | "\n", 94 | "- [Supervised Learning](https://medium.com/algorithms-data-structures/makine-%C3%B6%C4%9Frenmesi-supervised-vs-unsupervised-learning-299b8c639a01)" 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "**_Enes Çavuş_**" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [] 108 | } 109 | ], 110 | "metadata": { 111 | "kernelspec": { 112 | "display_name": "Python 3", 113 | "language": "python", 114 | "name": "python3" 115 | }, 116 | "language_info": { 117 | "codemirror_mode": { 118 | "name": "ipython", 119 | "version": 3 120 | }, 121 | "file_extension": ".py", 122 | "mimetype": "text/x-python", 123 | "name": "python", 124 | "nbconvert_exporter": "python", 125 | "pygments_lexer": "ipython3", 126 | "version": "3.7.6" 127 | } 128 | }, 129 | "nbformat": 4, 130 | "nbformat_minor": 4 131 | } 132 | -------------------------------------------------------------------------------- /Week1/RedLossAndTF.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Reducing Loss with Tensorflow Exercise" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## Model eğitminde kullanılan hiperparametrelerin optimum değerlerinin bulunması." 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Bence bilgisayar bilimlerinin temelinde **( divide and conquer ) _böl ve yönet_** ilkesi yatar. Eğer çok büyük bir projeyi ekip çalışması yapmadan, planlayıp parçalamadan (kitap - [**Scrum - Agile**](https://www.amazon.com.tr/Scrum-Kat%C4%B1-Zamanda-Yapma-Sanat%C4%B1/dp/6058487471/ref=asc_df_6058487471/?tag=googleshoptr-21&linkCode=df0&hvadid=344882438061&hvpos=&hvnetw=g&hvrand=4972712707744752112&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9056855&hvtargid=pla-713402970464&psc=1) ), iş bölümü yapmadan sizce başarıyla tamamlama olasılığınız nedir? Yoktur. Bunu her alanda uygulayabiliriz ama şimdilik bu ilk haftanın konuları üzerine yoğunlaşalım.\n", 29 | "\n", 30 | "Tabii ki tüm konular çok önemli ama bu haftayı dörde böldüm:\n", 31 | "+ Feature ve label kavramlarını anlama\n", 32 | "+ Loss yönetimine hakimiyeti artırma\n", 33 | "+ Laerning rate, batch, epoch hiperparametrelerini anlama\n", 34 | "+ Veriyi yönetme ve overfitting gibi olası problemlerden kaçınma ( Train - Validation - Test ) Bu kısma bu notebook üzerinde değinilmemiştir.\n", 35 | "\n", 36 | "\n", 37 | "**Note:** Bu yazdıklarım genel hatırlatma amaçlıdır. Arada girip göz atabileceğiniz CheatSheet. Detaya inmeden sadece genel bir bakış.\n" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": null, 43 | "metadata": {}, 44 | "outputs": [], 45 | "source": [ 46 | "#@title Run this Colab on TensorFlow 2.x # bu kısımda colab üzerinde kullanacağımız tensorflow sürümü seçini yapılmaktadır. Pek bi önemi yok şu anda\n", 47 | "%tensorflow_version 2.x" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": null, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "import pandas as pd # pandas veriyi analiz edebilmek için vazgeçilmez bir kütüphane. Bence ilk 10 da belki de 5\n", 57 | "import tensorflow as tf\n", 58 | "from matplotlib import pyplot as plt # matplotlib veriyi görselleştirmede öncü, bilmeyenler için seaborn'u da araştırabilirsiniz." 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "Sıradaki kodumuz model tanımlama işlemlerini içermektedir ve şu anda odağımızda değildir. Geçiniz! " 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": null, 71 | "metadata": {}, 72 | "outputs": [], 73 | "source": [ 74 | "#@title Define the functions that build and train a model\n", 75 | "def build_model(my_learning_rate):\n", 76 | " \"\"\"Create and compile a simple linear regression model.\"\"\"\n", 77 | " # Most simple tf.keras models are sequential. \n", 78 | " # A sequential model contains one or more layers.\n", 79 | " model = tf.keras.models.Sequential()\n", 80 | "\n", 81 | " # Describe the topography of the model.\n", 82 | " # The topography of a simple linear regression model\n", 83 | " # is a single node in a single layer. \n", 84 | " model.add(tf.keras.layers.Dense(units=1, \n", 85 | " input_shape=(1,)))\n", 86 | "\n", 87 | " # Compile the model topography into code that \n", 88 | " # TensorFlow can efficiently execute. Configure \n", 89 | " # training to minimize the model's mean squared error. \n", 90 | " model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=my_learning_rate),\n", 91 | " loss=\"mean_squared_error\",\n", 92 | " metrics=[tf.keras.metrics.RootMeanSquaredError()])\n", 93 | "\n", 94 | " return model \n", 95 | "\n", 96 | "\n", 97 | "def train_model(model, feature, label, epochs, batch_size):\n", 98 | " \"\"\"Train the model by feeding it data.\"\"\"\n", 99 | "\n", 100 | " # Feed the feature values and the label values to the \n", 101 | " # model. The model will train for the specified number \n", 102 | " # of epochs, gradually learning how the feature values\n", 103 | " # relate to the label values. \n", 104 | " history = model.fit(x=feature,\n", 105 | " y=label,\n", 106 | " batch_size=None,\n", 107 | " epochs=epochs)\n", 108 | "\n", 109 | " # Gather the trained model's weight and bias.\n", 110 | " trained_weight = model.get_weights()[0]\n", 111 | " trained_bias = model.get_weights()[1]\n", 112 | "\n", 113 | " # The list of epochs is stored separately from the \n", 114 | " # rest of history.\n", 115 | " epochs = history.epoch\n", 116 | " \n", 117 | " # Gather the history (a snapshot) of each epoch.\n", 118 | " hist = pd.DataFrame(history.history)\n", 119 | "\n", 120 | " # Specifically gather the model's root mean \n", 121 | " #squared error at each epoch. \n", 122 | " rmse = hist[\"root_mean_squared_error\"]\n", 123 | "\n", 124 | " return trained_weight, trained_bias, epochs, rmse\n", 125 | "\n", 126 | "print(\"Defined create_model and train_model\")" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": {}, 132 | "source": [ 133 | "\n", 134 | "Aşağıdaki kod, görselleştirme araçlarınn kulanılmasını sağlamakta ve yine bununla şimdilik işimiz yok. Evet veri görselleştirme ve veriyi analiz etme makine öğrenmesinin temelleri ama odak noktamız daha çok model eğitiminin teorik temelleri ve belli başlı parametrelere aşinalık kazanmamız. Bu yüzden bu kodu da geçelim.\n" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": null, 140 | "metadata": {}, 141 | "outputs": [], 142 | "source": [ 143 | "#@title Define the plotting functions\n", 144 | "def plot_the_model(trained_weight, trained_bias, feature, label):\n", 145 | " \"\"\"Plot the trained model against the training feature and label.\"\"\"\n", 146 | "\n", 147 | " # Label the axes.\n", 148 | " plt.xlabel(\"feature\")\n", 149 | " plt.ylabel(\"label\")\n", 150 | "\n", 151 | " # Plot the feature values vs. label values.\n", 152 | " plt.scatter(feature, label)\n", 153 | "\n", 154 | " # Create a red line representing the model. The red line starts\n", 155 | " # at coordinates (x0, y0) and ends at coordinates (x1, y1).\n", 156 | " x0 = 0\n", 157 | " y0 = trained_bias\n", 158 | " x1 = my_feature[-1]\n", 159 | " y1 = trained_bias + (trained_weight * x1)\n", 160 | " plt.plot([x0, x1], [y0, y1], c='r')\n", 161 | "\n", 162 | " # Render the scatter plot and the red line.\n", 163 | " plt.show()\n", 164 | "\n", 165 | "def plot_the_loss_curve(epochs, rmse):\n", 166 | " \"\"\"Plot the loss curve, which shows loss vs. epoch.\"\"\"\n", 167 | "\n", 168 | " plt.figure()\n", 169 | " plt.xlabel(\"Epoch\")\n", 170 | " plt.ylabel(\"Root Mean Squared Error\")\n", 171 | "\n", 172 | " plt.plot(epochs, rmse, label=\"Loss\")\n", 173 | " plt.legend()\n", 174 | " plt.ylim([rmse.min()*0.97, rmse.max()])\n", 175 | " plt.show()\n", 176 | "\n", 177 | "print(\"Defined the plot_the_model and plot_the_loss_curve functions.\")" 178 | ] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "metadata": {}, 183 | "source": [ 184 | "Elimizde bir veri olmadan model eğitemeyeceğimize göre. Şimdi Regresyon problemine uygun verimizi ve label değerlerini aşağıda görmekteyiz. Yeri gelmişken label ve feature kavramlarını biraz daha yakından inceleyelim." 185 | ] 186 | }, 187 | { 188 | "cell_type": "markdown", 189 | "metadata": {}, 190 | "source": [ 191 | "## Feature\n", 192 | " - Bizler modelimizi eğitirken ona bilgi vermekteyiz. Şu özellikleri al ve bunlardan bi çıkarım yap. Örneğin kurstaki ev örneğini alalım. Bi evin özellikleri neler olabilir : Kaç odalı? Kaç metrekare? Kaç banyosu var? Göl manzaralı mı? . Bunlar bizim modelimize vereceğimiz özellikler olacak. Peki bunları nasıl yorumlayacak bu model? İşte burada label ( etiket ) devreye giriyor.\n", 193 | " \n", 194 | "## Label\n", 195 | " - Şu cümleye geri dönelim -> _Şu özellikleri al ve bunlardan bir çıkarım yap_. Nasıl bir çıkarım yapacağını söyledik mi? Hayır. Bunu söylemek için label kullanıyoruz. Ekteki resime bakıldığında buradaki feature ve label değerleri görülmekte. Biz modelimize oda sayılarını vb veriyoruz ayrıca ek olarak ona bu özelliklere sahip bi evin değeri şu olur diyerek label'lama işlemini de yapmış oluyoruz. Oldukça anlaşılır dimi? Yine de bir örnek verelim.\n", 196 | "\n", 197 | "## Örnek\n", 198 | " Bir evimiz var ve bunun 4 odası, 2 banyosu, bahçesi var ve 150 metrekare ( bunlar özelliklerimizdi ) , değeri ise $260.000 (bu label).\n", 199 | " Bir evimiz var ve bunun 3 odası, 1 banyosu, bahçe yok, ve 120 metrekare (bunlar özelliklerimizdi ), değeri ise #130.000 (bu label)\n", 200 | " \n", 201 | " Bu bilgilerden milyonlarca olduğunu düşünün. Sizce bir evin bahçesi varsa değerinin artacağını modelimiz öğrenemez mi? Ya da banyo sayısının artması ile fiyatın arasında bir oran orantı yakalayamaz mı?\n", 202 | "\n", 203 | "\n", 204 | "![test image](images/feature-label.png)" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": null, 210 | "metadata": {}, 211 | "outputs": [], 212 | "source": [ 213 | "my_feature = ([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0])\n", 214 | "my_label = ([5.0, 8.8, 9.6, 14.2, 18.8, 19.5, 21.4, 26.8, 28.9, 32.0, 33.8, 38.2])" 215 | ] 216 | }, 217 | { 218 | "cell_type": "markdown", 219 | "metadata": {}, 220 | "source": [ 221 | "### Verimizi aldığımıza göre modelimizin hiperparametrelerine bi göz atalım.\n", 222 | "\n", 223 | "+ **Learning Rate :** learning rate kısaca verimiz üzerinde nasıl gezineceğimizi belirler. Verimizi yorumlarken düşük bir loss değerine erişmek iyidir fakat learning rate i çok küçük alırsanız ömür boyu erişemeyebilirsiniz. Ya da çok büyük alırsanız hedefimizin üzerinden atlar ve çok farklı konumlara şıçrayabilirsiniz.\n", 224 | " \n", 225 | "+ **Batch Size:** gerçek hayatta veri setlerimiz çok büyük ve bunu bir kerede modele verip yorumlamasını istememiz hatta bunu sürekli yaptırmamız belki de imkansız ya da zaman alır. Bunu önlemek için modelimize parça parça veri veriyoruz. Örneği: 1000 veriniz var batch size ise 100 seçtiniz, işte bu şekilde 10 tura tamamen verimiz modelden geçmiş olacaktır.Tur demişken ...\n", 226 | "\n", 227 | "+ **Epoch :** Tur dediğimiz şey aslında iterasyon sayısı. Örneğimizde bu 10 du. Peki bu 10 turun ( iterasyonun ) tamamlanması için geçen zamana ne deniyor? Epoch." 228 | ] 229 | }, 230 | { 231 | "cell_type": "code", 232 | "execution_count": null, 233 | "metadata": {}, 234 | "outputs": [], 235 | "source": [ 236 | "learning_rate=0.01\n", 237 | "epochs=10\n", 238 | "my_batch_size=12\n", 239 | "\n", 240 | "my_model = build_model(learning_rate)\n", 241 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 242 | " my_label, epochs,\n", 243 | " my_batch_size)\n", 244 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 245 | "plot_the_loss_curve(epochs, rmse)" 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": {}, 251 | "source": [ 252 | "Bu kısımda epoch hparametresini yorumlamamız istenmiş. Artırabiliriz, Aşırıya kaçmayalım çünkü overfitting hiç istemediğimiz bişey!" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": null, 258 | "metadata": {}, 259 | "outputs": [], 260 | "source": [ 261 | "learning_rate=0.01\n", 262 | "epochs= ? # Replace ? with an integer.\n", 263 | "my_batch_size=12\n", 264 | "\n", 265 | "my_model = build_model(learning_rate)\n", 266 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 267 | " my_label, epochs,\n", 268 | " my_batch_size)\n", 269 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 270 | "plot_the_loss_curve(epochs, rmse)" 271 | ] 272 | }, 273 | { 274 | "cell_type": "markdown", 275 | "metadata": {}, 276 | "source": [ 277 | "Bu kısımda learning rate'i yorumlamamız istenmiş. Yukarıda da açıklamıştım: Ne çok yüksek ne de çok düşük değerler vermeyelim, aşırıya kaçmadan orta yolu bulmamız kâfi." 278 | ] 279 | }, 280 | { 281 | "cell_type": "code", 282 | "execution_count": null, 283 | "metadata": {}, 284 | "outputs": [], 285 | "source": [ 286 | "# Increase the learning rate and decrease the number of epochs.\n", 287 | "learning_rate=100 \n", 288 | "epochs=500 \n", 289 | "\n", 290 | "my_model = build_model(learning_rate)\n", 291 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 292 | " my_label, epochs,\n", 293 | " my_batch_size)\n", 294 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 295 | "plot_the_loss_curve(epochs, rmse)" 296 | ] 297 | }, 298 | { 299 | "cell_type": "markdown", 300 | "metadata": {}, 301 | "source": [ 302 | "Burada ikisinide yorumlamamız istenmiş. Eğer learning rate küçülürse epoch'un artması işimize yarayabilir. Ya da tam tersi: learning rate büyürse epoch azalsa iyi olur.\n", 303 | "\n", 304 | "Optimumu bulmak için sürekli denemeler yapmamız gerekebilir. Ve kötü yanı, hiçbir zaman net bi değer yoktur. Bu parametreler veri setlerine özgü belirlenmeli. En garanti yol bu!" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": null, 310 | "metadata": {}, 311 | "outputs": [], 312 | "source": [ 313 | "# Set the learning rate and number of epochs\n", 314 | "learning_rate= ? # Replace ? with a floating-point number\n", 315 | "epochs= ? # Replace ? with an integer\n", 316 | "\n", 317 | "my_model = build_model(learning_rate)\n", 318 | "trained_weight, trained_bias, epochs, rmse = train_model(my_model, my_feature, \n", 319 | " my_label, epochs,\n", 320 | " my_batch_size)\n", 321 | "plot_the_model(trained_weight, trained_bias, my_feature, my_label)\n", 322 | "plot_the_loss_curve(epochs, rmse)" 323 | ] 324 | }, 325 | { 326 | "cell_type": "markdown", 327 | "metadata": {}, 328 | "source": [ 329 | "Bu örnekte batch_size'ın öneminin anlaşılamayacağını düşünüyorum. Daha büyük veri setlerinde farklı kombinasyonlarda görüşmek üzere." 330 | ] 331 | }, 332 | { 333 | "cell_type": "markdown", 334 | "metadata": {}, 335 | "source": [ 336 | "Ek Kaynaklar:\n", 337 | "\n", 338 | "- [Google Original Link](https://developers.google.com/machine-learning/crash-course/reducing-loss/video-lecture)\n", 339 | "- [Tensorflow Exercise](https://developers.google.com/machine-learning/crash-course/first-steps-with-tensorflow/programming-exercises)" 340 | ] 341 | }, 342 | { 343 | "cell_type": "markdown", 344 | "metadata": {}, 345 | "source": [ 346 | "**_Enes Çavuş_ - ML** " 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": null, 352 | "metadata": {}, 353 | "outputs": [], 354 | "source": [] 355 | } 356 | ], 357 | "metadata": { 358 | "kernelspec": { 359 | "display_name": "Python 3", 360 | "language": "python", 361 | "name": "python3" 362 | }, 363 | "language_info": { 364 | "codemirror_mode": { 365 | "name": "ipython", 366 | "version": 3 367 | }, 368 | "file_extension": ".py", 369 | "mimetype": "text/x-python", 370 | "name": "python", 371 | "nbconvert_exporter": "python", 372 | "pygments_lexer": "ipython3", 373 | "version": "3.7.6" 374 | } 375 | }, 376 | "nbformat": 4, 377 | "nbformat_minor": 4 378 | } 379 | -------------------------------------------------------------------------------- /Week1/TrainTestValidation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Train And Test Sets\n", 8 | "\n", 9 | "---" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "Modelimizin loss değeri ne kadar az ise o kadar iyi diyebiliriz fakat şöyle bir durum var modelimiz veri setimizi ezberlemiş olabiliri! Buna **overfitting** diyoruz. Yani modelimiz eğitim aşamasında çok güzel tahminlerde bulunuyor fakat modelimize daha önce görmediği, eğitim setinde bulunmayan bir veri verdiğimizde bize yanlış tahminlerde bulunuyor ise overfitting durumuna gelmiştir diyoruz. \n", 17 | "\n", 18 | "Bunun önüne geçebilmek için verimizi iki parçaya bölüyoruz \n", 19 | "\n", 20 | "- **Train** data . ( modelimiz kendini bu verileri kullanarak eğitecek )\n", 21 | "- **Test** data : ( tahminlerini kontrol etmek için test seti üzerinde de denemeler yapacak ) \n", 22 | "\n", 23 | "![trainandtest](images/trainandtest.png)\n", 24 | "\n", 25 | "Verimizin ne kadarını test ne kadarını train olarak kullanacağız?\n", 26 | "\n", 27 | "Bu konuda çeşitli öneriler olsa da yeni başlayanlar için projelerinde %20 test civarında pratik yapmaları iyi olacaktır. Daha sonra tecrübeleriniz arttıkça ve veri setlerinizi tanıdıkça kendiniz bu değerleri belirleyebileceksiniz. Örneğin ben bir görüntü işleme projesinde %15 test %85 train oranında güzel tahminler elde etmiştim. Ama her konuda olduğu gibi bu da **data dependent** yani verinize göre değişir. Kullandığım fotoğrafların kaliteleri değiştiğinde yüzdeler üzerinde oynamam gerektiği de oldu.\n", 28 | "\n", 29 | "\n", 30 | "\n", 31 | "Bu örneklerden sonra bir diğer problem olan **test setimiz üzerindeki overfitting'e** deyineceğiz. Bu nasıl oluyor?\n", 32 | "\n", 33 | "Modeliniz train set üzerinde ezberleme yapabildiği gibi aynı zamanda test set üzerinde de ezberleme yapabilir? Tahminlerini test setinde kontrol ederken bu kez ağırlıklarını test setine göre ayarlamaya başlayabilir. Bunu çözmek için ne yapıyoruz. Veri setimizi ikiye değil üçe bölüyoruz. Üçüncüsü ise **Validation Set**\n" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "---" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "# Validation Set" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "---" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "Farkı anlamamız için aşağıdaki resimleri inceleyelim. \n", 62 | "\n", 63 | "![valitest](images/valitest.png)\n", 64 | "\n", 65 | "Görüldüğü üzere modelimizi train - test setleri ile eğittiğimizde en iyi modeli seçiyoruz ve gerçek dünyaya alıyoruz. Test seti üzerinde bir overfitting söz konusu mu değil mi bilmiyoruz. \n", 66 | "\n", 67 | "Birde şu resimlere bakalım. \n", 68 | "\n", 69 | "Bu kez üçe böldük ve verimizin büyük bir kısmını train seti, bir kısmını validation set, bir kısmını test set olarak ayırdık.\n", 70 | "\n", 71 | "Modelimizin şimdi yapacağı iş train seti üzerinde denemeler yapacak ve validation üzerinde doğrulamalar yapacak. \n", 72 | "\n", 73 | "![valitest2](images/valitest2.png)\n", 74 | "\n", 75 | "![valitest3](images/valitest3.png)\n", 76 | "\n", 77 | "Bir önceki konuda olduğu gibi ama bir fark var: test seti değil validation seti üzerinde denemeler yapıyor. \n", 78 | "\n", 79 | "Eğitim tamamlandıktan sonra modelimizi gerçek dünyaya alıyoruz ve ayırmış olduğumuz test seti üzerinde denemelerde bulunuyoruz. \n", 80 | "\n", 81 | "Burada, modelimiz validation test üzerinde overfitting yapmış mı yoksa yapmamış mı anlayabiliyoruz. Yani overfitting'den bir basamak daha uzaklaşmış olduk. \n", 82 | "\n" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "Ek olarak train - test mantığının daha iyi anlaşılabileceğini düşündüğüm cross validation konusunu da buraya kaynak olarak eklemek istiyorum. Araştırılabilir ...\n", 90 | "\n", 91 | "- [Cross Validation](https://www.youtube.com/watch?v=fSytzGwwBVw)\n", 92 | "\n" 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "Ek Kaynaklar:\n", 100 | "\n", 101 | "- [Google Original Link - Train & Test](https://developers.google.com/machine-learning/crash-course/training-and-test-sets/splitting-data)\n", 102 | "- [Google Original Link - Validation ](https://developers.google.com/machine-learning/crash-course/validation/another-partition)\n" 103 | ] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": {}, 108 | "source": [ 109 | "**_Enes Çavuş_**" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": null, 115 | "metadata": {}, 116 | "outputs": [], 117 | "source": [] 118 | } 119 | ], 120 | "metadata": { 121 | "kernelspec": { 122 | "display_name": "Python 3", 123 | "language": "python", 124 | "name": "python3" 125 | }, 126 | "language_info": { 127 | "codemirror_mode": { 128 | "name": "ipython", 129 | "version": 3 130 | }, 131 | "file_extension": ".py", 132 | "mimetype": "text/x-python", 133 | "name": "python", 134 | "nbconvert_exporter": "python", 135 | "pygments_lexer": "ipython3", 136 | "version": "3.7.6" 137 | } 138 | }, 139 | "nbformat": 4, 140 | "nbformat_minor": 4 141 | } 142 | -------------------------------------------------------------------------------- /Week1/images/.ipynb_checkpoints/regression-checkpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/.ipynb_checkpoints/regression-checkpoint.png -------------------------------------------------------------------------------- /Week1/images/equation1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/equation1.png -------------------------------------------------------------------------------- /Week1/images/equation2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/equation2.png -------------------------------------------------------------------------------- /Week1/images/examples.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/examples.png -------------------------------------------------------------------------------- /Week1/images/feature-label.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/feature-label.png -------------------------------------------------------------------------------- /Week1/images/linear1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/linear1.png -------------------------------------------------------------------------------- /Week1/images/linear2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/linear2.png -------------------------------------------------------------------------------- /Week1/images/regression.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/regression.png -------------------------------------------------------------------------------- /Week1/images/trainandtest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/trainandtest.png -------------------------------------------------------------------------------- /Week1/images/valitest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/valitest.png -------------------------------------------------------------------------------- /Week1/images/valitest2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/valitest2.png -------------------------------------------------------------------------------- /Week1/images/valitest3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week1/images/valitest3.png -------------------------------------------------------------------------------- /Week2/.ipynb_checkpoints/FeatureCrosses-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Feature Crosses" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Şu ana kadar her bir feature'ı tek tek ele aldık. Bu linear problemlerde oldukça işimize yarayabiliyor evet ama düz bir çizgi ile her türlü problemi çözemeyiz. Parabolik, daha fazla boyutlu problemlerde bu bizi zorlar. Bu yüzden feature cross gibi teknikler çok işimize yarayacaktır." 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Aşağıdaki resimlerde de görüleceği üzere tek çizgi yetersiz kalmakta" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "![f1](images/f1.png) ![f2](images/f2.png)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "Figure 1'de x1 ve x2 feature'ları ayrı ayrı kullanılabilir ve işe yarar. Figure 3'de ise bir başka yöntem deneyebiliriz. (x1.x2) bu çaprazlamayı farklı bir özellikmiş gibi modelimize verebiliriz ve modelmiz bundan çok güzel sonuçlar çıkaracaktır." 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "## ÖRNEK" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "Üstte yazdıklarım ile pek bir şey anlaşılmadığının farkındayım ve gerçek hayattan bir örnek ile konuya açıklık getireceğim. \n", 57 | "\n", 58 | "Elimizde **[x1 , x2 ] = [ konum , oda_sayısı]** diye iki özelligimiz olsun ve bunları birlikte kullanırsak veya ayrı ayrı kullanırsak neler olabileceğini gözlemleyelim" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "Örnek iki evi ele alalım. Bir tanesi İstanbulda ve 4 odalı. Bir diğeri ise Sakaryada ve yine 4 odalı. Bilineceği üzere bu evlerin fiyatları aynı olmayacaktır. \n", 66 | "Fiyatlandırmayı şöyle yapalım:\n", 67 | "- İstanbuldaki evimiz : 500.000 TL\n", 68 | "- Sakaryadaki evimiz : 300.000 TL\n", 69 | "\n", 70 | "Oda sayılarından ziyade konumun fiyata etkili olduğunu biliyoruz. Şimdi her ikisinde de oda sayılarını 1 azaltalım. Bakalım fiyatlar nasıl oynayacak.\n", 71 | "- 3 odalı İstanbuldaki evimiz 400.000 TL\n", 72 | "- 3 odalı Sakaryadaki evimiz 250.000 TL\n", 73 | "\n", 74 | "Her ikisinde de oda sayısı 1 azalmasına rağmen fiyatlarda o eşit düşüşü yakalayamadık. İstanbul 100.000 Sakarya ise 50.000 azaldı.\n" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": {}, 80 | "source": [ 81 | "Bunu sadece x1 ve x2 özelliklerini ayrı ayrı verdiğmizde modelimiz sizce net bir şekilde anlayabilir mi? Hayır. Çünkü modelimiz oda sayılarını kendi aralarında karşılatırıyor. \" oda sayısı artarsa fiyat artar mesela 60.000 \".\n", 82 | "\n", 83 | "Ama x1.x2 özelliğimizi de eğitime eklediğimizde bu kez diyeceği şu olur. \" İstanbulda oda sayısı artışına göre fiyat artışı biraz daha fazla mesela 100.000 ama Sakaryada bu değişim daha az mesela 50.000 \" \n", 84 | "\n", 85 | "Evleri yorumlarken konum bazlı fiyat değişikliklerini anlama açısından daha güçlü bir modelimiz oldu.\n", 86 | "\n", 87 | "Umarım yeterince açıklayıcı olmuştur. " 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "Ek Kaynaklar:\n", 95 | "\n", 96 | "- [Course Link](https://developers.google.com/machine-learning/crash-course/feature-crosses/video-lecture)" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "**_Enes Çavuş_**" 104 | ] 105 | } 106 | ], 107 | "metadata": { 108 | "kernelspec": { 109 | "display_name": "Python 3", 110 | "language": "python", 111 | "name": "python3" 112 | }, 113 | "language_info": { 114 | "codemirror_mode": { 115 | "name": "ipython", 116 | "version": 3 117 | }, 118 | "file_extension": ".py", 119 | "mimetype": "text/x-python", 120 | "name": "python", 121 | "nbconvert_exporter": "python", 122 | "pygments_lexer": "ipython3", 123 | "version": "3.7.6" 124 | } 125 | }, 126 | "nbformat": 4, 127 | "nbformat_minor": 4 128 | } 129 | -------------------------------------------------------------------------------- /Week2/.ipynb_checkpoints/LogisticRegression-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Logistic Regression ( Probability )" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Linear Regression'da modelimizin verebileceği çıktılar belliydi. **'Spam'** ya da **'Not Spam'**. Ama Logistic Regression'da durumlar biraz farklı mesela cevap şöyle olabilir: '**Bu mail 80% ihtimalle spam'**. \n", 22 | "\n", 23 | "Evet konumuzun temeli **OLASILIK**" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "Sağlık sektöründe kullanılan bi makine öğrenmesi modelini düşünün ( ne kadar kritik kararlar alması gerektiğini tahmin edebiliyorsunuzdur ). Kanser tedavisinde kullanılan model, sizce bu modelin sadece iki adet çıktı vermesi ne kadar doğru. **Kanser** ya da **kanser değil**. Çok riskli dimi? İşte şimdi devreye Logistic Regression'ı sokabiliriz.\n", 31 | "\n", 32 | "\n", 33 | "![lr1](images/lr1.png)\n" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "Bize 0 - 1 arasında değerler döndürecek olan bu modelimiz Logistic regression kullanılarak geliştirilebilir.\n", 41 | "\n", 42 | "Bir örnek verecek olursak:\n", 43 | "Kanser teşhisinde 0.5 değeri orta bir değer olsun. Bizim çıktımız ise 0.48 olsun. Eğer modelimiz linear regression olsaydı bize vereceği cevap belkide **kanser değil** olacaktı ama logistic regression'da bize **48% olasılıkla kanser olma ihitimali var** olacaktır. Sanırım ne kadar önemli olduğu anlaşılmıştır. " 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "Ayrıca Linear Regression ile karşılaştırıldığında loss fonksiyonunda da farklar var. \n", 51 | "\n", 52 | "Linear Regression **squared loss function** kullanırken Logistic Regression **Log Loss Function** kullnamaktadır.\n", 53 | "\n", 54 | "![lr2](images/lr2.png)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "Bir diğer konu ise **Regularization**'ın burada da çok önemli olmasıdır. Birçok konuda yardımı dokunacaktır. \n", 62 | "\n", 63 | "Çok iyi açıklayamayacağım ve şu anda çok önemli olmadığı için ayrıntıya inmeyeceğim." 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "metadata": {}, 69 | "source": [ 70 | "Ek Kaynaklar:\n", 71 | "\n", 72 | "- [Course Link](https://developers.google.com/machine-learning/crash-course/logistic-regression/video-lecture)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "**_Enes Çavuş_**" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": null, 85 | "metadata": {}, 86 | "outputs": [], 87 | "source": [] 88 | } 89 | ], 90 | "metadata": { 91 | "kernelspec": { 92 | "display_name": "Python 3", 93 | "language": "python", 94 | "name": "python3" 95 | }, 96 | "language_info": { 97 | "codemirror_mode": { 98 | "name": "ipython", 99 | "version": 3 100 | }, 101 | "file_extension": ".py", 102 | "mimetype": "text/x-python", 103 | "name": "python", 104 | "nbconvert_exporter": "python", 105 | "pygments_lexer": "ipython3", 106 | "version": "3.7.6" 107 | } 108 | }, 109 | "nbformat": 4, 110 | "nbformat_minor": 4 111 | } 112 | -------------------------------------------------------------------------------- /Week2/.ipynb_checkpoints/Regularization-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Regularization nedir?" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Bugüne kadar hep en düşük \"loss\" değerine ulaşmaya çalıştık ki modelimiz bir şeyler öğrendiğini bize kanıtlasın ama şöyle bir durum var, modelimiz ezberlemeye başlamış olabilir. işte bunun önüne geçmek için **_regularization_** kullanıyoruz." 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Regularization makine öğrenmesi alanında mutlaka bilinmesi ve çok iyi öğrenilmesi gereken bir yöntemdir. Bildiğiniz üzere makine öğrenmesinde başta gelen sorunlardan birisi **overfitting** yani modelimizin eğitim setimizi ezberlemesi durumu. Neredeyse 0 olan loss değerini gördüğümüzde sevinip bir de test ettiğimizde üzülmemize neden olan bu durumu **regularization** ile nasıl çözebiliriz?" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "**Overfitting**i nasıl anlarız? Elimizde **train** ve **validation** setlerimiz var. Bunları bir eğitim sürecine sokalım. Loss değeri beklenildiği üzere zamanla azalacak, her iki veri seti için. Fakat bazen öyle bir an gelecek ki **train** setimiz **0** a yaklaşırken **validation** setimizin loss değeri artmaya başlayacak. İşte bu durumda modelimiz ona verdiğimiz eğitim verilerini ezberlemeye başlamış ve artık test ettiğimiz validation verileri üzerinde yanlış tahminler yapmaya başlamış demektir. Buna **overfitting** diyoruz.\n", 36 | "\n", 37 | "![overfitting](images/overfitting.png)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | " Regularization da iki yöntem var. L1 (Lasso regression) , L2 (Ridge regression). Biz burada L2 regularization'dan bahsediyor olacağız." 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "## L2 Regularization ( Ridge Regression )" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "L2 regularization'da, normal linear regression problemlerinde kullanmış olduğumuz loss fonksiyonuna ek olarak, olağandışı ağırlık değerlerini cezalandırabileceğimiz\n", 59 | "bir matematiksel işlem ekleyeceğiz. " 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "Elimizde **loss** ve **regularization** için iki fonksiyonumuz olacak. \n", 67 | "\n", 68 | "Bunlar **Loss** ve **complexity**: " 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "![reg1](images/reg1.png)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "Eklemiş olduğumuz yeni fonksiyonda ağırlıklarımızın karelerini alıyor olacağız. Ayrıca **Lambda** dediğimiz ve bizim veri setlerimize göre değişkenlik gösterecek bir parametremiz daha var. Böylelikle formülümüz" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "![reg2](images/reg2.png) olacaktır." 90 | ] 91 | }, 92 | { 93 | "cell_type": "markdown", 94 | "metadata": {}, 95 | "source": [ 96 | "**lambda** seçimi ise kritik rol oynamaktadır. Şöyle ki: \n", 97 | "- lamda 0 seçilirse regularization fonksiyonumu işlev dışı kalır ve bir işe yaramaz yani **overfitting** ihtimali vardır.\n", 98 | "- lambda çok büyük seçilirse ağırlıkları cezalandırmada problem yaşar ve **underfitting** durumu söz konusu olur. \n", 99 | "\n", 100 | "Yukarıda da bahsettiğim üzere **lambda** seçimi veri setine ve içerisindeki özelliklere göre değişiklik gösterecektir ama genellikle **0 - 1** arası değerler kullanılmaktadır." 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "Ek Kaynaklar:\n", 108 | "- [regularization ek-1 ](https://towardsdatascience.com/regularization-in-machine-learning-76441ddcf99a)\n", 109 | "- [regularization ek-2 ](https://www.youtube.com/watch?v=Q81RR3yKn30)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "**_Enes Çavuş_**" 117 | ] 118 | } 119 | ], 120 | "metadata": { 121 | "kernelspec": { 122 | "display_name": "Python 3", 123 | "language": "python", 124 | "name": "python3" 125 | }, 126 | "language_info": { 127 | "codemirror_mode": { 128 | "name": "ipython", 129 | "version": 3 130 | }, 131 | "file_extension": ".py", 132 | "mimetype": "text/x-python", 133 | "name": "python", 134 | "nbconvert_exporter": "python", 135 | "pygments_lexer": "ipython3", 136 | "version": "3.7.6" 137 | } 138 | }, 139 | "nbformat": 4, 140 | "nbformat_minor": 4 141 | } 142 | -------------------------------------------------------------------------------- /Week2/.ipynb_checkpoints/Representation-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Representation" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Makine öğrenmesinin belli başlı aşamaları vardır:\n", 22 | "- Veri Toplama\n", 23 | "- Veri hazırlama\n", 24 | "- Model / algoritma seçimi\n", 25 | "- Eğitim ... gibi\n", 26 | "\n", 27 | "Bu aşamalardan en çok zaman alanı veri hazırlama / temizleme aşamasıdır. Verilerimizi farklı kaynaklardan toplarken bazı farklılıklar olacaktır. Örneğin bir kaynakta _cadde_ diye bir özellik varken bir diğerinde bu değerler boş bıraklımış olabilir ya da anlamsız veriler girilmiş de olabilri, bunun gibi birçok durum vardır. Bunlara en sonda biraz değineceğim.\n", 28 | "\n", 29 | "Bu aşamalarda dikkat etmemiz gereken en önemli nokta, modleimize vereceğimiz verinin 'raw data' yani bozuk, dağınık, düzenlenmemiş veri, değil de; nımeric, düzenlenmiş, boşluklar giderilmiş, outlier'lardan arındırılmış, modelimizin yorumlayabileceği tarzda veriler olması gerekliliğidir.\n", 30 | "\n", 31 | "Sonrası zaten çok daha kolay hale gelecektir.\n", 32 | "\n" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": {}, 38 | "source": [ 39 | "Konumuz olan representation ise ** veri hazırlama ** kısmında yer alır ve çok önemlidir. Hatta o kadar önemlidir ki modelimizin kaderi bu aşamaya bağlıdır diyebiliriz.\n", 40 | "Birkaç örnek ile konuyu çok daha rahat anlayıp noktalayalım." 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "Bu resimde elimizdeki ev biligileri \"raw\" olarak bulunmakta. Biz bunları modelimizin yorumlayabileceği bir hale yani numeric ve vektörel hale, getiriyoruz. Buna \"feature engineering\" deniyor ve çok önemli bir aşama." 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "![figure1](images/1.png)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "Bu resimde ise zaten numeric bir veriyi yine numeric olarak göstermişiz. pek bi anlamı yok çünkü eski hali de gayet anlaşılabilir haldeydi. Yani buradan anlayacağımız, zaten numeric değerlere sahip özellikler üzerinde pek fazla işlem yapmamız gerekmeyeceğidir." 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "![figure2](images/2.png)" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "Bu resim ise bizim için oldukça önemli. Elimizde string ( kategorik ) veriler bulunduğunda; örneğin cadde isimleri, bunu modelimiz yorumlauyamaz çünkü o sayılar üzerinde işlem yapabilmekte.\n", 76 | "\n", 77 | "Bir çözüm olarak 6 caddemizi 0 1 2 3 4 5 diye numaralandırmayı düşünebilirsiniz ama bu kez ağırlıkları ayarlarken çok dengesiz sonuçlar elde edebilir. Yani pek güveniliir bir yol değil a çıkçası. ( y = w1.x1 + w2.x2 ... )\n", 78 | "\n", 79 | "Burada caddeleri bir \"binary vector\" e atmalıyız. One-hot encoding dediğimiz yöntemi daha sonra açıklayacağım. Kısacası elimizde bir binary vector var ve modelimiz hangi cadde üzerinde çlışıyorsa bu caddenin değeri 1 diğer caddeler 0 olarak alınacak. [ 0,0,0,0,1,0,0]" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "![figure3](images/3.png)" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "metadata": {}, 92 | "source": [ 93 | "# Bir özellik nasıl olmalı ? " 94 | ] 95 | }, 96 | { 97 | "cell_type": "markdown", 98 | "metadata": {}, 99 | "source": [ 100 | "**1 - Anlamlı veriler kullanalım.** Şu iki özelliğe bakalım: \n", 101 | " - Ev tipi: Apartment, Cabin, castle ...\n", 102 | " - Eşşiz id: 876789LWEBXY87435\n", 103 | "Ev tipi bizim için evin değerini belirlememizde oldukça yararlı bir özellik olabiliyorken, evin id'si işimize yaramayacak bir özellik bu yüzden bunun gibi özelliklerle modelimizi yormamalıyız." 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "**2 - Temiz veri kullanmaya özen gösterelim.** Verileri giren mühendis kendi çapında nalamlandırabileceği değerleri girmiş olabilir ama **user_age: 250** bizim için pek bi anlam ifade etmemektedir. **47** gibi dikkate değerleri kullanırsak modelimiz için daha iyi olacaktır." 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "metadata": {}, 116 | "source": [ 117 | "**3 - Boş veya yanlış verilerden kaçının.** Model bunları anlamaz ya da yanlış yorumlayabilir. Örneğin **kalite_standartı** diye bir özelliğimiz olsun ve 0 - 1 arasında değerlerden oluşşun. Mühendisimiz **-1** girmiş. Bu kabul edilemez. Ya da **kalite_standart** belirtilmemiş de olabilir. Bu gibi durumlar için ise **_kalite_standartı_belirtilmis_mi_** gibi özellikler de kullanılabilir." 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "**4 - Sürekli değişebilecek verileri olan özellikleri kullanmaktan kaçınmalıyız.** Örneğin, biraz saçma bir örnek olsa da, evdeğeri belirleyen bir modeli hava durumu gibi özellikler kullanarak eğitmek pek anlamlı görünmemektedir." 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "metadata": {}, 130 | "source": [ 131 | "## Veri Temizleme" 132 | ] 133 | }, 134 | { 135 | "cell_type": "markdown", 136 | "metadata": {}, 137 | "source": [ 138 | "## **1- Scaling**\n", 139 | "\n", 140 | "Örneğin elimizde 100 - 900 arası değerlere sahip bir özellik var. Biz bunu 0 - 1 arasına sıkıştırabiliriz. 100 yerine 0.1 450 yerine 0.45. Bu **scaling**. Büyük değer aralıklarında modelimiz ağırlık seçimlerinde zorlanacaktır. Scaling ile bunun önüne geçilebilir." 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "## **2 - Outlier'lardan kurtulma** \n", 148 | "Resimi incelediğimizde kişi başı 40 - 50 oda bulunabileceğinden bahsetmektedir. çok mantıksız değil mi ? \n", 149 | "Bu uzun kuyruktan kurtulmamaız gerek ama nasıl ?\n", 150 | "\n" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "![o1](images/o1.png)" 158 | ] 159 | }, 160 | { 161 | "cell_type": "markdown", 162 | "metadata": {}, 163 | "source": [ 164 | "**Log alma:**\n", 165 | "log ( ( totalRoom / population ) + 1 ) . Bu verimizi nispeten daha mantıklı hale getirdi. Ama hala bir dengesizlik var. " 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "metadata": {}, 171 | "source": [ 172 | "![o2](images/02.png)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "**Kırpma:**\n", 180 | "Verimizin mantığın şaştığı kısımlardan itibaren kırpılması ve o eski abartılı değerleri en mantıklı bir değere eşleme ( bizi burada 4.0 seçmişiz )" 181 | ] 182 | }, 183 | { 184 | "cell_type": "markdown", 185 | "metadata": {}, 186 | "source": [ 187 | "![o3](images/o3.png)" 188 | ] 189 | }, 190 | { 191 | "cell_type": "markdown", 192 | "metadata": {}, 193 | "source": [ 194 | "## **3 - Binning**\n", 195 | "\n", 196 | "Binning ile özelliğimizdeki çok küçük değer değişimlerini göz ardı edip bu değerleri belli aralıklara indirgiyoruz. Resimde de görüldüğü üzere evimizin enlem değeri 34.2 - 34.4 gibi farklı değerler olmasına rağmen bunları tek bir aralıkta ( 34 - 35 ) olarak alıyoruz, yani 10 farklı değerimiz varken ( 34.1, 34.2 ... 34.9 ), biz bunu 1'e indirdik. Çok daha kullanışlı hale geldi ve karmaşıklıktan arındı." 197 | ] 198 | }, 199 | { 200 | "cell_type": "markdown", 201 | "metadata": {}, 202 | "source": [ 203 | "![o4](images/o4.png) ![o5](images/o5.png)" 204 | ] 205 | }, 206 | { 207 | "cell_type": "markdown", 208 | "metadata": {}, 209 | "source": [ 210 | "## **4 - Scrubbing** \n", 211 | "\n", 212 | "Şu ana kadar sürekli güzel veriler üzerinde çalıştık. Ama gerçek hayatta veriler bu kadar temiz ve düzenlenmiş olmayacaktır. Bu yüzden birkaç veri temizleme adımını inceleyelim:\n", 213 | "\n", 214 | " - **İhmal edilen değerler** : Evimizin yaşı girilmemiş. NaN\n", 215 | " - **Çoğaltılmış örnekler** : Bir evin bilgilerini 2 kere girilmiş olarak görebilirsiniz. Aynı değerler aynı ev. Fazlalıkları istemiyoruz.\n", 216 | " - **Kötü etiketlenme**: Portakalı greyfurt olarak etiketleme.\n", 217 | " - **Kötü özellik değerleri** : 7% yerine %7 girilmiş değer. -- ? ? ? --\n", 218 | " \n", 219 | "Bu özellikleri - değerleri - etiketleri bulup verisetinizden atabilir ya da düzeltebilirsiniz. Pandas kütüphanesi kullanmanız sizin için çok yararlı olacaktır. Eğer pandas hakkında hiçbir bilginiz yok ise başlangıç olarak şu [video serisinden](https://www.youtube.com/playlist?list=PLk54I7lqQSsaV8SxQDj19JVKfE_cM-Skp) yararlanabilirsiniz." 220 | ] 221 | }, 222 | { 223 | "cell_type": "markdown", 224 | "metadata": {}, 225 | "source": [ 226 | "**_Enes Çavuş_**" 227 | ] 228 | } 229 | ], 230 | "metadata": { 231 | "kernelspec": { 232 | "display_name": "Python 3", 233 | "language": "python", 234 | "name": "python3" 235 | }, 236 | "language_info": { 237 | "codemirror_mode": { 238 | "name": "ipython", 239 | "version": 3 240 | }, 241 | "file_extension": ".py", 242 | "mimetype": "text/x-python", 243 | "name": "python", 244 | "nbconvert_exporter": "python", 245 | "pygments_lexer": "ipython3", 246 | "version": "3.7.6" 247 | } 248 | }, 249 | "nbformat": 4, 250 | "nbformat_minor": 4 251 | } 252 | -------------------------------------------------------------------------------- /Week2/.ipynb_checkpoints/o5-checkpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/.ipynb_checkpoints/o5-checkpoint.png -------------------------------------------------------------------------------- /Week2/FeatureCrosses.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Feature Crosses" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Şu ana kadar her bir feature'ı tek tek ele aldık. Bu linear problemlerde oldukça işimize yarayabiliyor evet ama düz bir çizgi ile her türlü problemi çözemeyiz. Parabolik, daha fazla boyutlu problemlerde bu bizi zorlar. Bu yüzden feature cross gibi teknikler çok işimize yarayacaktır." 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Aşağıdaki resimlerde de görüleceği üzere tek çizgi yetersiz kalmakta" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "![f1](images/f1.png) ![f2](images/f2.png)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "Figure 1'de x1 ve x2 feature'ları ayrı ayrı kullanılabilir ve işe yarar. Figure 3'de ise bir başka yöntem deneyebiliriz. (x1.x2) bu çaprazlamayı farklı bir özellikmiş gibi modelimize verebiliriz ve modelmiz bundan çok güzel sonuçlar çıkaracaktır." 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "## ÖRNEK" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "Üstte yazdıklarım ile pek bir şey anlaşılmadığının farkındayım ve gerçek hayattan bir örnek ile konuya açıklık getireceğim. \n", 57 | "\n", 58 | "Elimizde **[x1 , x2 ] = [ konum , oda_sayısı]** diye iki özelligimiz olsun ve bunları birlikte kullanırsak veya ayrı ayrı kullanırsak neler olabileceğini gözlemleyelim" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "Örnek iki evi ele alalım. Bir tanesi İstanbulda ve 4 odalı. Bir diğeri ise Sakaryada ve yine 4 odalı. Bilineceği üzere bu evlerin fiyatları aynı olmayacaktır. \n", 66 | "Fiyatlandırmayı şöyle yapalım:\n", 67 | "- İstanbuldaki evimiz : 500.000 TL\n", 68 | "- Sakaryadaki evimiz : 300.000 TL\n", 69 | "\n", 70 | "Oda sayılarından ziyade konumun fiyata etkili olduğunu biliyoruz. Şimdi her ikisinde de oda sayılarını 1 azaltalım. Bakalım fiyatlar nasıl oynayacak.\n", 71 | "- 3 odalı İstanbuldaki evimiz 400.000 TL\n", 72 | "- 3 odalı Sakaryadaki evimiz 250.000 TL\n", 73 | "\n", 74 | "Her ikisinde de oda sayısı 1 azalmasına rağmen fiyatlarda o eşit düşüşü yakalayamadık. İstanbul 100.000 Sakarya ise 50.000 azaldı.\n" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": {}, 80 | "source": [ 81 | "Bunu sadece x1 ve x2 özelliklerini ayrı ayrı verdiğmizde modelimiz sizce net bir şekilde anlayabilir mi? Hayır. Çünkü modelimiz oda sayılarını kendi aralarında karşılatırıyor. \" oda sayısı artarsa fiyat artar mesela 60.000 \".\n", 82 | "\n", 83 | "Ama x1.x2 özelliğimizi de eğitime eklediğimizde bu kez diyeceği şu olur. \" İstanbulda oda sayısı artışına göre fiyat artışı biraz daha fazla mesela 100.000 ama Sakaryada bu değişim daha az mesela 50.000 \" \n", 84 | "\n", 85 | "Evleri yorumlarken konum bazlı fiyat değişikliklerini anlama açısından daha güçlü bir modelimiz oldu.\n", 86 | "\n", 87 | "Umarım yeterince açıklayıcı olmuştur. " 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "Ek Kaynaklar:\n", 95 | "\n", 96 | "- [Course Link](https://developers.google.com/machine-learning/crash-course/feature-crosses/video-lecture)" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "**_Enes Çavuş_**" 104 | ] 105 | } 106 | ], 107 | "metadata": { 108 | "kernelspec": { 109 | "display_name": "Python 3", 110 | "language": "python", 111 | "name": "python3" 112 | }, 113 | "language_info": { 114 | "codemirror_mode": { 115 | "name": "ipython", 116 | "version": 3 117 | }, 118 | "file_extension": ".py", 119 | "mimetype": "text/x-python", 120 | "name": "python", 121 | "nbconvert_exporter": "python", 122 | "pygments_lexer": "ipython3", 123 | "version": "3.7.6" 124 | } 125 | }, 126 | "nbformat": 4, 127 | "nbformat_minor": 4 128 | } 129 | -------------------------------------------------------------------------------- /Week2/LogisticRegression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Logistic Regression ( Probability )" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Linear Regression'da modelimizin verebileceği çıktılar belliydi. **'Spam'** ya da **'Not Spam'**. Ama Logistic Regression'da durumlar biraz farklı mesela cevap şöyle olabilir: '**Bu mail 80% ihtimalle spam'**. \n", 22 | "\n", 23 | "Evet konumuzun temeli **OLASILIK**" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "Sağlık sektöründe kullanılan bi makine öğrenmesi modelini düşünün ( ne kadar kritik kararlar alması gerektiğini tahmin edebiliyorsunuzdur ). Kanser tedavisinde kullanılan model, sizce bu modelin sadece iki adet çıktı vermesi ne kadar doğru. **Kanser** ya da **kanser değil**. Çok riskli dimi? İşte şimdi devreye Logistic Regression'ı sokabiliriz.\n", 31 | "\n", 32 | "\n", 33 | "![lr1](images/lr1.png)\n" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "Bize 0 - 1 arasında değerler döndürecek olan bu modelimiz Logistic regression kullanılarak geliştirilebilir.\n", 41 | "\n", 42 | "Bir örnek verecek olursak:\n", 43 | "Kanser teşhisinde 0.5 değeri orta bir değer olsun. Bizim çıktımız ise 0.48 olsun. Eğer modelimiz linear regression olsaydı bize vereceği cevap belkide **kanser değil** olacaktı ama logistic regression'da bize **48% olasılıkla kanser olma ihitimali var** olacaktır. Sanırım ne kadar önemli olduğu anlaşılmıştır. " 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "Ayrıca Linear Regression ile karşılaştırıldığında loss fonksiyonunda da farklar var. \n", 51 | "\n", 52 | "Linear Regression **squared loss function** kullanırken Logistic Regression **Log Loss Function** kullnamaktadır.\n", 53 | "\n", 54 | "![lr2](images/lr2.png)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "Bir diğer konu ise **Regularization**'ın burada da çok önemli olmasıdır. Birçok konuda yardımı dokunacaktır. \n", 62 | "\n", 63 | "Çok iyi açıklayamayacağım ve şu anda çok önemli olmadığı için ayrıntıya inmeyeceğim." 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "metadata": {}, 69 | "source": [ 70 | "Ek Kaynaklar:\n", 71 | "\n", 72 | "- [Course Link](https://developers.google.com/machine-learning/crash-course/logistic-regression/video-lecture)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "**_Enes Çavuş_**" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": null, 85 | "metadata": {}, 86 | "outputs": [], 87 | "source": [] 88 | } 89 | ], 90 | "metadata": { 91 | "kernelspec": { 92 | "display_name": "Python 3", 93 | "language": "python", 94 | "name": "python3" 95 | }, 96 | "language_info": { 97 | "codemirror_mode": { 98 | "name": "ipython", 99 | "version": 3 100 | }, 101 | "file_extension": ".py", 102 | "mimetype": "text/x-python", 103 | "name": "python", 104 | "nbconvert_exporter": "python", 105 | "pygments_lexer": "ipython3", 106 | "version": "3.7.6" 107 | } 108 | }, 109 | "nbformat": 4, 110 | "nbformat_minor": 4 111 | } 112 | -------------------------------------------------------------------------------- /Week2/Regularization.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Regularization nedir?" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Bugüne kadar hep en düşük \"loss\" değerine ulaşmaya çalıştık ki modelimiz bir şeyler öğrendiğini bize kanıtlasın ama şöyle bir durum var, modelimiz ezberlemeye başlamış olabilir. işte bunun önüne geçmek için **_regularization_** kullanıyoruz." 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Regularization makine öğrenmesi alanında mutlaka bilinmesi ve çok iyi öğrenilmesi gereken bir yöntemdir. Bildiğiniz üzere makine öğrenmesinde başta gelen sorunlardan birisi **overfitting** yani modelimizin eğitim setimizi ezberlemesi durumu. Neredeyse 0 olan loss değerini gördüğümüzde sevinip bir de test ettiğimizde üzülmemize neden olan bu durumu **regularization** ile nasıl çözebiliriz?" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "**Overfitting**i nasıl anlarız? Elimizde **train** ve **validation** setlerimiz var. Bunları bir eğitim sürecine sokalım. Loss değeri beklenildiği üzere zamanla azalacak, her iki veri seti için. Fakat bazen öyle bir an gelecek ki **train** setimiz **0** a yaklaşırken **validation** setimizin loss değeri artmaya başlayacak. İşte bu durumda modelimiz ona verdiğimiz eğitim verilerini ezberlemeye başlamış ve artık test ettiğimiz validation verileri üzerinde yanlış tahminler yapmaya başlamış demektir. Buna **overfitting** diyoruz.\n", 36 | "\n", 37 | "![overfitting](images/overfitting.png)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | " Regularization da iki yöntem var. L1 (Lasso regression) , L2 (Ridge regression). Biz burada L2 regularization'dan bahsediyor olacağız." 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "## L2 Regularization ( Ridge Regression )" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "L2 regularization'da, normal linear regression problemlerinde kullanmış olduğumuz loss fonksiyonuna ek olarak, olağandışı ağırlık değerlerini cezalandırabileceğimiz\n", 59 | "bir matematiksel işlem ekleyeceğiz. " 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "Elimizde **loss** ve **regularization** için iki fonksiyonumuz olacak. \n", 67 | "\n", 68 | "Bunlar **Loss** ve **complexity**: " 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "![reg1](images/reg1.png)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "Eklemiş olduğumuz yeni fonksiyonda ağırlıklarımızın karelerini alıyor olacağız. Ayrıca **Lambda** dediğimiz ve bizim veri setlerimize göre değişkenlik gösterecek bir parametremiz daha var. Böylelikle formülümüz" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "![reg2](images/reg2.png) olacaktır." 90 | ] 91 | }, 92 | { 93 | "cell_type": "markdown", 94 | "metadata": {}, 95 | "source": [ 96 | "**lambda** seçimi ise kritik rol oynamaktadır. Şöyle ki: \n", 97 | "- lamda 0 seçilirse regularization fonksiyonumu işlev dışı kalır ve bir işe yaramaz yani **overfitting** ihtimali vardır.\n", 98 | "- lambda çok büyük seçilirse ağırlıkları cezalandırmada problem yaşar ve **underfitting** durumu söz konusu olur. \n", 99 | "\n", 100 | "Yukarıda da bahsettiğim üzere **lambda** seçimi veri setine ve içerisindeki özelliklere göre değişiklik gösterecektir ama genellikle **0 - 1** arası değerler kullanılmaktadır." 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "Ek Kaynaklar:\n", 108 | "- [regularization ek-1 ](https://towardsdatascience.com/regularization-in-machine-learning-76441ddcf99a)\n", 109 | "- [regularization ek-2 ](https://www.youtube.com/watch?v=Q81RR3yKn30)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "**_Enes Çavuş_**" 117 | ] 118 | } 119 | ], 120 | "metadata": { 121 | "kernelspec": { 122 | "display_name": "Python 3", 123 | "language": "python", 124 | "name": "python3" 125 | }, 126 | "language_info": { 127 | "codemirror_mode": { 128 | "name": "ipython", 129 | "version": 3 130 | }, 131 | "file_extension": ".py", 132 | "mimetype": "text/x-python", 133 | "name": "python", 134 | "nbconvert_exporter": "python", 135 | "pygments_lexer": "ipython3", 136 | "version": "3.7.6" 137 | } 138 | }, 139 | "nbformat": 4, 140 | "nbformat_minor": 4 141 | } 142 | -------------------------------------------------------------------------------- /Week2/Representation.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Representation" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "---" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Makine öğrenmesinin belli başlı aşamaları vardır:\n", 22 | "- Veri Toplama\n", 23 | "- Veri hazırlama\n", 24 | "- Model / algoritma seçimi\n", 25 | "- Eğitim ... gibi\n", 26 | "\n", 27 | "Bu aşamalardan en çok zaman alanı veri hazırlama / temizleme aşamasıdır. Verilerimizi farklı kaynaklardan toplarken bazı farklılıklar olacaktır. Örneğin bir kaynakta _cadde_ diye bir özellik varken bir diğerinde bu değerler boş bıraklımış olabilir ya da anlamsız veriler girilmiş de olabilri, bunun gibi birçok durum vardır. Bunlara en sonda biraz değineceğim.\n", 28 | "\n", 29 | "Bu aşamalarda dikkat etmemiz gereken en önemli nokta, modleimize vereceğimiz verinin 'raw data' yani bozuk, dağınık, düzenlenmemiş veri, değil de; nımeric, düzenlenmiş, boşluklar giderilmiş, outlier'lardan arındırılmış, modelimizin yorumlayabileceği tarzda veriler olması gerekliliğidir.\n", 30 | "\n", 31 | "Sonrası zaten çok daha kolay hale gelecektir.\n", 32 | "\n" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "metadata": {}, 38 | "source": [ 39 | "Konumuz olan representation ise ** veri hazırlama ** kısmında yer alır ve çok önemlidir. Hatta o kadar önemlidir ki modelimizin kaderi bu aşamaya bağlıdır diyebiliriz.\n", 40 | "Birkaç örnek ile konuyu çok daha rahat anlayıp noktalayalım." 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "Bu resimde elimizdeki ev biligileri \"raw\" olarak bulunmakta. Biz bunları modelimizin yorumlayabileceği bir hale yani numeric ve vektörel hale, getiriyoruz. Buna \"feature engineering\" deniyor ve çok önemli bir aşama." 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "![figure1](images/1.png)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "Bu resimde ise zaten numeric bir veriyi yine numeric olarak göstermişiz. pek bi anlamı yok çünkü eski hali de gayet anlaşılabilir haldeydi. Yani buradan anlayacağımız, zaten numeric değerlere sahip özellikler üzerinde pek fazla işlem yapmamız gerekmeyeceğidir." 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "![figure2](images/2.png)" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "Bu resim ise bizim için oldukça önemli. Elimizde string ( kategorik ) veriler bulunduğunda; örneğin cadde isimleri, bunu modelimiz yorumlauyamaz çünkü o sayılar üzerinde işlem yapabilmekte.\n", 76 | "\n", 77 | "Bir çözüm olarak 6 caddemizi 0 1 2 3 4 5 diye numaralandırmayı düşünebilirsiniz ama bu kez ağırlıkları ayarlarken çok dengesiz sonuçlar elde edebilir. Yani pek güveniliir bir yol değil a çıkçası. ( y = w1.x1 + w2.x2 ... )\n", 78 | "\n", 79 | "Burada caddeleri bir \"binary vector\" e atmalıyız. One-hot encoding dediğimiz yöntemi daha sonra açıklayacağım. Kısacası elimizde bir binary vector var ve modelimiz hangi cadde üzerinde çlışıyorsa bu caddenin değeri 1 diğer caddeler 0 olarak alınacak. [ 0,0,0,0,1,0,0]" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "![figure3](images/3.png)" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "metadata": {}, 92 | "source": [ 93 | "# Bir özellik nasıl olmalı ? " 94 | ] 95 | }, 96 | { 97 | "cell_type": "markdown", 98 | "metadata": {}, 99 | "source": [ 100 | "**1 - Anlamlı veriler kullanalım.** Şu iki özelliğe bakalım: \n", 101 | " - Ev tipi: Apartment, Cabin, castle ...\n", 102 | " - Eşşiz id: 876789LWEBXY87435\n", 103 | "Ev tipi bizim için evin değerini belirlememizde oldukça yararlı bir özellik olabiliyorken, evin id'si işimize yaramayacak bir özellik bu yüzden bunun gibi özelliklerle modelimizi yormamalıyız." 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "**2 - Temiz veri kullanmaya özen gösterelim.** Verileri giren mühendis kendi çapında nalamlandırabileceği değerleri girmiş olabilir ama **user_age: 250** bizim için pek bi anlam ifade etmemektedir. **47** gibi dikkate değerleri kullanırsak modelimiz için daha iyi olacaktır." 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "metadata": {}, 116 | "source": [ 117 | "**3 - Boş veya yanlış verilerden kaçının.** Model bunları anlamaz ya da yanlış yorumlayabilir. Örneğin **kalite_standartı** diye bir özelliğimiz olsun ve 0 - 1 arasında değerlerden oluşşun. Mühendisimiz **-1** girmiş. Bu kabul edilemez. Ya da **kalite_standart** belirtilmemiş de olabilir. Bu gibi durumlar için ise **_kalite_standartı_belirtilmis_mi_** gibi özellikler de kullanılabilir." 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "**4 - Sürekli değişebilecek verileri olan özellikleri kullanmaktan kaçınmalıyız.** Örneğin, biraz saçma bir örnek olsa da, evdeğeri belirleyen bir modeli hava durumu gibi özellikler kullanarak eğitmek pek anlamlı görünmemektedir." 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "metadata": {}, 130 | "source": [ 131 | "## Veri Temizleme" 132 | ] 133 | }, 134 | { 135 | "cell_type": "markdown", 136 | "metadata": {}, 137 | "source": [ 138 | "## **1- Scaling**\n", 139 | "\n", 140 | "Örneğin elimizde 100 - 900 arası değerlere sahip bir özellik var. Biz bunu 0 - 1 arasına sıkıştırabiliriz. 100 yerine 0.1 450 yerine 0.45. Bu **scaling**. Büyük değer aralıklarında modelimiz ağırlık seçimlerinde zorlanacaktır. Scaling ile bunun önüne geçilebilir." 141 | ] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "metadata": {}, 146 | "source": [ 147 | "## **2 - Outlier'lardan kurtulma** \n", 148 | "Resimi incelediğimizde kişi başı 40 - 50 oda bulunabileceğinden bahsetmektedir. çok mantıksız değil mi ? \n", 149 | "Bu uzun kuyruktan kurtulmamaız gerek ama nasıl ?\n", 150 | "\n" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "![o1](images/o1.png)" 158 | ] 159 | }, 160 | { 161 | "cell_type": "markdown", 162 | "metadata": {}, 163 | "source": [ 164 | "**Log alma:**\n", 165 | "log ( ( totalRoom / population ) + 1 ) . Bu verimizi nispeten daha mantıklı hale getirdi. Ama hala bir dengesizlik var. " 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "metadata": {}, 171 | "source": [ 172 | "![o2](images/02.png)" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": {}, 178 | "source": [ 179 | "**Kırpma:**\n", 180 | "Verimizin mantığın şaştığı kısımlardan itibaren kırpılması ve o eski abartılı değerleri en mantıklı bir değere eşleme ( bizi burada 4.0 seçmişiz )" 181 | ] 182 | }, 183 | { 184 | "cell_type": "markdown", 185 | "metadata": {}, 186 | "source": [ 187 | "![o3](images/o3.png)" 188 | ] 189 | }, 190 | { 191 | "cell_type": "markdown", 192 | "metadata": {}, 193 | "source": [ 194 | "## **3 - Binning**\n", 195 | "\n", 196 | "Binning ile özelliğimizdeki çok küçük değer değişimlerini göz ardı edip bu değerleri belli aralıklara indirgiyoruz. Resimde de görüldüğü üzere evimizin enlem değeri 34.2 - 34.4 gibi farklı değerler olmasına rağmen bunları tek bir aralıkta ( 34 - 35 ) olarak alıyoruz, yani 10 farklı değerimiz varken ( 34.1, 34.2 ... 34.9 ), biz bunu 1'e indirdik. Çok daha kullanışlı hale geldi ve karmaşıklıktan arındı." 197 | ] 198 | }, 199 | { 200 | "cell_type": "markdown", 201 | "metadata": {}, 202 | "source": [ 203 | "![o4](images/o4.png) ![o5](images/o5.png)" 204 | ] 205 | }, 206 | { 207 | "cell_type": "markdown", 208 | "metadata": {}, 209 | "source": [ 210 | "## **4 - Scrubbing** \n", 211 | "\n", 212 | "Şu ana kadar sürekli güzel veriler üzerinde çalıştık. Ama gerçek hayatta veriler bu kadar temiz ve düzenlenmiş olmayacaktır. Bu yüzden birkaç veri temizleme adımını inceleyelim:\n", 213 | "\n", 214 | " - **İhmal edilen değerler** : Evimizin yaşı girilmemiş. NaN\n", 215 | " - **Çoğaltılmış örnekler** : Bir evin bilgilerini 2 kere girilmiş olarak görebilirsiniz. Aynı değerler aynı ev. Fazlalıkları istemiyoruz.\n", 216 | " - **Kötü etiketlenme**: Portakalı greyfurt olarak etiketleme.\n", 217 | " - **Kötü özellik değerleri** : 7% yerine %7 girilmiş değer. -- ? ? ? --\n", 218 | " \n", 219 | "Bu özellikleri - değerleri - etiketleri bulup verisetinizden atabilir ya da düzeltebilirsiniz. Pandas kütüphanesi kullanmanız sizin için çok yararlı olacaktır. Eğer pandas hakkında hiçbir bilginiz yok ise başlangıç olarak şu [video serisinden](https://www.youtube.com/playlist?list=PLk54I7lqQSsaV8SxQDj19JVKfE_cM-Skp) yararlanabilirsiniz." 220 | ] 221 | }, 222 | { 223 | "cell_type": "markdown", 224 | "metadata": {}, 225 | "source": [ 226 | "**_Enes Çavuş_**" 227 | ] 228 | } 229 | ], 230 | "metadata": { 231 | "kernelspec": { 232 | "display_name": "Python 3", 233 | "language": "python", 234 | "name": "python3" 235 | }, 236 | "language_info": { 237 | "codemirror_mode": { 238 | "name": "ipython", 239 | "version": 3 240 | }, 241 | "file_extension": ".py", 242 | "mimetype": "text/x-python", 243 | "name": "python", 244 | "nbconvert_exporter": "python", 245 | "pygments_lexer": "ipython3", 246 | "version": "3.7.6" 247 | } 248 | }, 249 | "nbformat": 4, 250 | "nbformat_minor": 4 251 | } 252 | -------------------------------------------------------------------------------- /Week2/images/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/02.png -------------------------------------------------------------------------------- /Week2/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/1.png -------------------------------------------------------------------------------- /Week2/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/2.png -------------------------------------------------------------------------------- /Week2/images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/3.png -------------------------------------------------------------------------------- /Week2/images/f1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/f1.png -------------------------------------------------------------------------------- /Week2/images/f2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/f2.png -------------------------------------------------------------------------------- /Week2/images/lr1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/lr1.png -------------------------------------------------------------------------------- /Week2/images/lr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/lr2.png -------------------------------------------------------------------------------- /Week2/images/o1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/o1.png -------------------------------------------------------------------------------- /Week2/images/o3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/o3.png -------------------------------------------------------------------------------- /Week2/images/o4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/o4.png -------------------------------------------------------------------------------- /Week2/images/o5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/o5.png -------------------------------------------------------------------------------- /Week2/images/overfitting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/overfitting.png -------------------------------------------------------------------------------- /Week2/images/reg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/reg1.png -------------------------------------------------------------------------------- /Week2/images/reg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week2/images/reg2.png -------------------------------------------------------------------------------- /Week3/.ipynb_checkpoints/Classification-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Classification" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Hatırlatma!\n", 15 | " - Makine Öğrenmesi\n", 16 | " \n", 17 | " - Supervised learning\n", 18 | " - Regresssion\n", 19 | " - Classification\n", 20 | " - Unsupervised\n", 21 | " - Clustering\n", 22 | " - Association" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "### Sınıflandırmayı daha iyi anlayabilmek için Regresyon ile arasındaki farkları inceleyerek başlayalım." 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "- Sınıflandırma **ayrık** veriler üzerinde çalışırken regresyon probremlerinde **sürekli** veriler üzerinde çalışılır\n", 37 | "- Sınıflandırma **sıralanmamış, dağınık** veriler ile, regresyon ise belli bir **düzene sahip, sıralanmış** veriler üzerinde işlem yapar\n", 38 | "- Model değerlendirme yöntemlerinde sınıflandırma algoritmalarında **'confusion matrix, accuracy, precision, recall, F1 score** gibi değerlendirme yöntemleri varken regresyonda **'mean squared error ( loss )'** kullanılır. (Burayı okuyorsanız bu terimlere aşina olmalısınız.)\n", 39 | "- Sınıflandırmada **kategorik** verilerle (spam, not spam, canser, not canser) , regresyonda ise **numeric** verilerle (click_count, median_house_value) çalışılır.\n", 40 | "\n" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "Sınıflandırmada kullanılan Threshold değeri nedir?\n", 48 | "\n", 49 | "**Eşik değer** dediğimiz threshold, algortimamızın tahminlerinde kullanılır. Örneğin **spam** ya da **spam değil** diye tahminlerde bulunabilen bir algoritmamız var ve bu algoritma **0 - 1** arasında değerler tahmin ediyor. Yani **1 = 100% spam** , **0 = 0% spam değil** gibi. Eğer **0.48** ise ne yapacağız?. Burada algoritmamıza _\"Eşik değeri olarak 0.5 al ve bundan büyük veya eşit olanları \"spam\", küçük olanları \"not spam\" olarak bize döndür\"_ diyebiliriz. " 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "### **Confusion Matrix | True & False , Positive & Negative | Accuracy - Recall - Precision**\n", 57 | "\n", 58 | "\n", 59 | "Karşılaştırma kısmında bahsettiğim metrikler burada karşımıza çıkıyor, hepsi bir arada, tek bir şeye bağlı : **confusion matrix**\n", 60 | "\n", 61 | "\n", 62 | "\n", 63 | "\n", 64 | "Nedir bu confusion matrix?\n", 65 | "\n", 66 | "Confusion matrix, algoritmamızın bize ne kadar doğru ne kadar yanlış sonuçlar döndürüğünü tek bir karede gösterebilen matristir.\n", 67 | "\n", 68 | "\n", 69 | "![TPFN](images/TFPN.png)\n", 70 | "\n", 71 | "Görüldüğü üzere dört seçeneğimiz var. Bunları bir örnek ile anlatacağım.\n", 72 | "\n", 73 | "Elimizde örnek bir hikaye var : _Yalancı çoban_\n", 74 | "\n", 75 | "Çobanın iki seçeneği var: Kurt var , Kurt Yok\n", 76 | "\n", 77 | "Gerçekte iki seçenek var: Kurt Var , Kurt Yok\n", 78 | "\n", 79 | "\n", 80 | "Yani bu örnek 2 x 2 lik bir matris ile toplamda 4 olasılığımız olacak. (Bu 100 x 100 de olur bi sınır yok, elimizdeki özelliklere göre değişir.)\n", 81 | "\n", 82 | "---\n", 83 | "\n", 84 | "\n", 85 | "- True Positive ( TP ): Çoban Kurt VAR dedi ve gerçekten de kurt VAR. (Dürüst Çoban)\n", 86 | "- True Negative ( TN ): Çoban Kurt YOK dedi ve gerçekten de kurt YOK. (Dürüst Çoban)\n", 87 | "- False Positive ( FP ): Çoban kurt VAR dedi ama kurt YOK. (Yalancı Çoban)\n", 88 | "- False Negative ( FN ): Çoban kurt YOK dedi ama kurt VAR. (Yalancı Çoban)\n", 89 | "\n", 90 | "\n", 91 | "\n", 92 | "---\n", 93 | "\n", 94 | "\n", 95 | "![TPFN2](images/TFPN2.png)\n", 96 | "\n" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "### **Accuracy ( Doğruluk ) - Recall ( Duyarlılık ) - Precision ( Kesinlik )** " 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "### **Accuracy**\n", 111 | "\n", 112 | "Doğruluk, modelimizin doğru tahminlerinin tüm tahminlerine oranıdır. \n", 113 | "\n", 114 | "Burada özet geçtiğimden dolayı daha fazla detaya, verdiğim ek kaynaklardan, aynı zamanda kursun kendi kaynağından ulaşabilirsiniz.\n", 115 | "\n", 116 | "![accuracy](images/accuracy.png)\n", 117 | "\n", 118 | "---\n", 119 | "\n", 120 | "### **Recall**\n", 121 | "Çobanımız, kurt olan tüm zamanlara kıyasla kaç kez gerçekten kurt olup olmadığını söyledi? \n", 122 | "\n", 123 | "**Note:**Kritik alanlarda (hastalık teşhisi gibi), dikkate alınması gereken bir noktadır. \n", 124 | "![recall](images/Recall.png)\n", 125 | "\n", 126 | "---\n", 127 | "### **Precision**\n", 128 | "Çobanımız, kurt olsa da olmasa da kaç kere \"kurt var\" demiş? Çobanımızın dürüstlüğünü ölçebiliriz.\n", 129 | "\n", 130 | "\n", 131 | "![precision](images/Precision.png)\n", 132 | "\n", 133 | "---\n", 134 | "\n", 135 | "\n", 136 | "### **ALL in ONE** ( FN - FP konumları yukarıdaki örnekten farklı, lütfen ona dikkat edelim! )\n", 137 | "\n", 138 | "![allinone](images/allinone.png)\n" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": {}, 144 | "source": [ 145 | "### **ROC and AUC** \n", 146 | "\n", 147 | "Modelimizin özeti olarak düşünebiliriz. Daha fazla detay için [şuradan](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc) konuyu inceleyebilirsiniz.\n", 148 | "\n" 149 | ] 150 | }, 151 | { 152 | "cell_type": "markdown", 153 | "metadata": {}, 154 | "source": [ 155 | "**_Ekler_**\n", 156 | "- [Classification](https://www.geeksforgeeks.org/ml-classification-vs-regression/?ref=rp)\n", 157 | "- [Confusion Matrix](https://towardsdatascience.com/understanding-confusion-matrix-a9ad42dcfd62)\n", 158 | "- [Türkçe ek kaynak](https://medium.com/data-science-tr/s%C4%B1n%C4%B1fland%C4%B1rma-modellerinde-ba%C5%9Far%C4%B1-kriterleri-2d86488799c6)" 159 | ] 160 | }, 161 | { 162 | "cell_type": "markdown", 163 | "metadata": {}, 164 | "source": [ 165 | "\n", 166 | "\n", 167 | "**_Enes Çavuş_**\n", 168 | "\n" 169 | ] 170 | } 171 | ], 172 | "metadata": { 173 | "kernelspec": { 174 | "display_name": "Python 3", 175 | "language": "python", 176 | "name": "python3" 177 | }, 178 | "language_info": { 179 | "codemirror_mode": { 180 | "name": "ipython", 181 | "version": 3 182 | }, 183 | "file_extension": ".py", 184 | "mimetype": "text/x-python", 185 | "name": "python", 186 | "nbconvert_exporter": "python", 187 | "pygments_lexer": "ipython3", 188 | "version": "3.7.6" 189 | } 190 | }, 191 | "nbformat": 4, 192 | "nbformat_minor": 4 193 | } 194 | -------------------------------------------------------------------------------- /Week3/.ipynb_checkpoints/L1_regularization-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Regularization for Sparsity: L₁ Regularization" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Bu bölümde L1 regularization üzerinde duracağız, daha net anlaşılabilmesi için L2 regularization ile aralarındaki farklara bakacağız." 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## L1 vs L2 Regularization" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Bu iki yöntem overfitting problemi için çözüm üretmekte ama aralarında çok önemli bir fark var. \n", 29 | "\n", 30 | "**L2 regularization'da** bahsettiğim ağırlıkları cezalandırma olayı burada daha farklı işliyor.\n" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": {}, 36 | "source": [ 37 | "En önemli 2 farkı şöyle listeleyelim\n", 38 | "\n", 39 | "- L2 **ağırlıkların karesini** kullanarak işlem yapıyor L1 ise **ağırlıkların mutlak değerini** kullanarak işlem yapıyor.\n", 40 | "\n", 41 | "- L2 anlamsız ağırlık değerlerini **neredeyse** 0'a indiriyor; L1 ise anlamsız ağrılık değerlerini **tam olarak** 0'a indiriyor." 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "![l1vsl2](images/l1vsl2.png)" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "Ek kaynaklar\n", 56 | "\n", 57 | "[Ek - 1](https://developers.google.com/machine-learning/crash-course/regularization-for-sparsity/l1-regularization)\n", 58 | "\n", 59 | "[Ek - 2](https://towardsdatascience.com/l1-and-l2-regularization-methods-ce25e7fc831c)" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "**_Enes Çavuş_**" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": null, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [] 75 | } 76 | ], 77 | "metadata": { 78 | "kernelspec": { 79 | "display_name": "Python 3", 80 | "language": "python", 81 | "name": "python3" 82 | }, 83 | "language_info": { 84 | "codemirror_mode": { 85 | "name": "ipython", 86 | "version": 3 87 | }, 88 | "file_extension": ".py", 89 | "mimetype": "text/x-python", 90 | "name": "python", 91 | "nbconvert_exporter": "python", 92 | "pygments_lexer": "ipython3", 93 | "version": "3.7.6" 94 | } 95 | }, 96 | "nbformat": 4, 97 | "nbformat_minor": 4 98 | } 99 | -------------------------------------------------------------------------------- /Week3/.ipynb_checkpoints/MultiClassNets-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Multi - Class Neural Nets" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### \"One vs All\" vs \"Softmax\"\n", 15 | "\n", 16 | "Şu ana kadar sadece bir output üzerinde çalıştık.\n", 17 | "\n", 18 | "Peki daha fazla output varsa ?\n", 19 | "\n", 20 | "Örneğin: Kedi , Köpek , Elma , Muz , Kitap ...\n", 21 | "\n", 22 | "Modele bir fotoğraf verelim ve yukarıdakilerden hangisine ait oldugunu bulsun?. Yüzeysel olarak incelenen bu konuda sadece output üzerinde anlatım yapılmış. İnceleyelim...\n", 23 | "\n", 24 | "**One vs All** baskınlığa dayalı bir yöntem. Resmimiz tahmin edilirken, köpek ağır basıyorsa diğer olasılıkları direkt eleyerek \"bu köpek\" diyecektir. \n", 25 | "\n", 26 | "\n", 27 | "![OnevsAll](images/OnevsAll.png)\n", 28 | "\n", 29 | "\n", 30 | "**Softmax** ise outputlarımız üzerinde tahmin yaparken **_olasılıklar_** döndürür. Yani **One vs All** normal linear regression ise **Softmax** logistic regression gibi düşünebilirsiniz. ( Sadece ouput farklarının anlaşılması için verdiğim bir örnek, yoksa tabii ki farklar var.)\n", 31 | "\n", 32 | "\n", 33 | "![Softmax](images/Softmax.png)\n" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "## Multi-Clas Nets [Colab Egzersizi](https://colab.research.google.com/github/google/eng-edu/blob/master/ml/cc/exercises/multi-class_classification_with_MNIST.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=multiclass_tf2-colab&hl=en)\n", 41 | "\n", 42 | "\n", 43 | "Not: Sadece önemli olduğunu düşündüğüm kodları ekliyorum. Dğier kısımlar önceki egzersizlerle aynı.\n", 44 | "\n", 45 | "\n", 46 | "\n", 47 | "Bu kodda farklı olarak\n", 48 | "\n", 49 | " - Keras kütüphanesinden \"Flatten\" fonksiyonu var. Bu fonksiyon resmimizin iki boyutlu (28 x 28 ) lik matrisi tek boyutlu ( 784 ) matris haline geritiyor ve verimizi modele aktarmamız çok daha kolaylaşıyor aynı zamanda modelin veriyi işlemesi de hızlanmış oluyor.\n", 50 | "\n", 51 | "\n", 52 | "- Aktivasyon olarak yine \"ReLU\" kullanıldıgını görüyoruz.\n", 53 | "\n", 54 | "- Farklı olarak \"Dropout\" fonskiyonu var. Nedir bu Dropout?\n", 55 | "\n", 56 | "Droput layer bir regularization işlemidir. L2 L1 da yaptığımız gibi, düğümlerimizin üzerinde ağırlıkları kontrol eder, anlamsız ve işe yaramayanların üzerinde işlem yapar. Overfitting probleminden kaçınmamızı sağlar. Daha fazlası için kaynak sondaki ektedir.\n", 57 | "\n", 58 | "- Son olarak ise \"Softmax\" output katmanımız. Görüldüğü üzere 10 farklı unit var demişiz çünkü veri setimiz MNIST yani 0 - 9 arasındaki değerler. \"Softmax\", tıpkı ReLU gibi activation olarak belirtiliyor. \n", 59 | "\n", 60 | "\n", 61 | "Sonraki eğitim aşamaları diğer örneklerimizde olduğu gibi devam etmektedir.\n" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "def create_model(my_learning_rate):\n", 71 | " \"\"\"Create and compile a deep neural net.\"\"\"\n", 72 | " \n", 73 | " # All models in this course are sequential.\n", 74 | " model = tf.keras.models.Sequential()\n", 75 | "\n", 76 | " # The features are stored in a two-dimensional 28X28 array. \n", 77 | " # Flatten that two-dimensional array into a a one-dimensional \n", 78 | " # 784-element array.\n", 79 | " model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))\n", 80 | "\n", 81 | " # Define the first hidden layer. \n", 82 | " model.add(tf.keras.layers.Dense(units=32, activation='relu'))\n", 83 | " \n", 84 | " # Define a dropout regularization layer. \n", 85 | " model.add(tf.keras.layers.Dropout(rate=0.2))\n", 86 | "\n", 87 | " # Define the output layer. The units parameter is set to 10 because\n", 88 | " # the model must choose among 10 possible output values (representing\n", 89 | " # the digits from 0 to 9, inclusive).\n", 90 | " #\n", 91 | " # Don't change this layer.\n", 92 | " model.add(tf.keras.layers.Dense(units=10, activation='softmax')) \n", 93 | " \n", 94 | " # Construct the layers into a model that TensorFlow can execute. \n", 95 | " # Notice that the loss function for multi-class classification\n", 96 | " # is different than the loss function for binary classification. \n", 97 | " model.compile(optimizer=tf.keras.optimizers.Adam(lr=my_learning_rate),\n", 98 | " loss=\"sparse_categorical_crossentropy\",\n", 99 | " metrics=['accuracy'])\n", 100 | " \n", 101 | " return model \n", 102 | "\n", 103 | "\n", 104 | "def train_model(model, train_features, train_label, epochs,\n", 105 | " batch_size=None, validation_split=0.1):\n", 106 | " \"\"\"Train the model by feeding it data.\"\"\"\n", 107 | "\n", 108 | " history = model.fit(x=train_features, y=train_label, batch_size=batch_size,\n", 109 | " epochs=epochs, shuffle=True, \n", 110 | " validation_split=validation_split)\n", 111 | " \n", 112 | " # To track the progression of training, gather a snapshot\n", 113 | " # of the model's metrics at each epoch. \n", 114 | " epochs = history.epoch\n", 115 | " hist = pd.DataFrame(history.history)\n", 116 | "\n", 117 | " return epochs, hist " 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "Ek kaynaklar\n", 125 | "- [One vs All](https://developers.google.com/machine-learning/crash-course/multi-class-neural-networks/one-vs-all)\n", 126 | "- [Softmax](https://developers.google.com/machine-learning/crash-course/multi-class-neural-networks/softmax)\n", 127 | "-[Dropout](https://medium.com/@amarbudhiraja/https-medium-com-amarbudhiraja-learning-less-to-learn-better-dropout-in-deep-machine-learning-74334da4bfc5)" 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": {}, 133 | "source": [ 134 | "**_Enes Çavuş_**" 135 | ] 136 | } 137 | ], 138 | "metadata": { 139 | "kernelspec": { 140 | "display_name": "Python 3", 141 | "language": "python", 142 | "name": "python3" 143 | }, 144 | "language_info": { 145 | "codemirror_mode": { 146 | "name": "ipython", 147 | "version": 3 148 | }, 149 | "file_extension": ".py", 150 | "mimetype": "text/x-python", 151 | "name": "python", 152 | "nbconvert_exporter": "python", 153 | "pygments_lexer": "ipython3", 154 | "version": "3.7.6" 155 | } 156 | }, 157 | "nbformat": 4, 158 | "nbformat_minor": 4 159 | } 160 | -------------------------------------------------------------------------------- /Week3/.ipynb_checkpoints/Neuralnetworks-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Neural Networks" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "**Neural network** nedir ?\n", 15 | "\n", 16 | "İnsan beynindeki nöronlardan esinlenerek bilgisayar ortamında geliştirilmiş makine öğrenmesi algoritmalarında yer alan yöntemlerde biridir.\n", 17 | "\n", 18 | "İnsan beyni inanılmaz derecede kompleks olduğundan gerçek anlamda yanına bile yaklaşamayan derin ağlar yine de inanılmaz işlere imza atıyor bu günlerde. \n", 19 | "\n", 20 | "İnsan beyninde milyonlarca bulunan nöronlar bilgisayar ortamında gerek hafıza gerek zaman gibi problemler yüzünden 10.000 ler civarında. Daha büyük çalışmalar var tabii ama hala geliştirme aşamalarında olduklarını görüyoruz okuyoruz.\n", 21 | "\n", 22 | "Neural Network için incelemek amaçlı aşağıdaki resme baktığımızda **perceptron** olarak adlandırılan yapıyı görmekteyiz. \n", 23 | "\n", 24 | "![percetron](images/perceptron.png)\n", 25 | "\n", 26 | "Yine lineer problemlerde olduğu gibi inputlarımız var. Hatta yine lineer problemlerde olduğu gibi ağırlık değerlerimiz de var. Ama ek olarak **activation function** ı görmekteyiz ki bu kısım çok önemli.\n", 27 | "\n", 28 | "**Aktivasyon fonksiyonu** ağımızın lineerligini non-linear hale dönüştürmeye yarıyor. Bunun detaylarına daha sonra ineceğiz.\n", 29 | "\n", 30 | "\n", 31 | "Şimd geneline değindik biraz daha detaya inmek için linear örneklerden non-linear'a doğru inceleyelim.\n" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "## Basit bir nöral ağ yapısı ve hidden layer\n", 39 | "\n", 40 | "\n", 41 | "Aşağıda gördüğünüz olabilecek en basit yapılardan birisi. \n", 42 | "\n", 43 | "Farklı olarak karşımıza çıkan şey ise **hidden layer**. \n", 44 | "\n", 45 | "Nedir bu hidden layer? \n", 46 | "\n", 47 | "Hidden layer'larda çarprazlama işlemleri yapılıyor. Ne işe yaradığı ise çok net. Verdiğimiz inputları mümkün olduğunca farklı ağırlıkları deneyerek sonuca ulaşma olasılığımızı optimum noktaya getirmek.\n", 48 | "\n", 49 | "\n", 50 | "![nn1](images/nn1.png)" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "Bu hidden layer'lardan istediğimiz kadar ekleyebileceğimiz gibi, içerdikleri düğüm sayılarını da istediğimiz kadar artırabiliriz. Bu da sonuca ulaşmamız için değerlendirememiz gereken olasık uzayını çok fazla genişletebilmemizi sağlıyor. " 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": {}, 63 | "source": [ 64 | "![nn2](images/nn2.png)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "markdown", 69 | "metadata": {}, 70 | "source": [ 71 | "Bu yukarıda gördükleriniz **linear** modellerdi. Hepsi sadece bir output düğümüne sahip. Şimdi yine bir output ama aktivasyon fonksiyonlu örneğini inceleyelim.\n", 72 | "\n", 73 | "Aşağıdaki resimde ise iki hidden layer arasında bir de aktivasyon fonksiyonumuz var. Başlangıçta da bahsettiğm üzere bu aktivasyon fonksiyonu bizim linear yapımızı non-linear hale getirecek olan şey.\n", 74 | "\n", 75 | "Bu fonksiyonu da eklediğinizde çok daha zor problemlerin üstesinden gelebilecek hale geliyorsunuz. \n", 76 | "\n", 77 | "Bu konuyu kurs üzerinden alıp ekleyeceğim, resimde inceleyebilirsiniz.\n", 78 | "\n", 79 | "\n", 80 | "![nn3](images/nn3.png)\n", 81 | "\n" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "![nn4](images/nn4.png)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "Ek Kaynaklar \n", 96 | "\n", 97 | "- [Google-original-page](https://developers.google.com/machine-learning/crash-course/introduction-to-neural-networks/anatomy)\n", 98 | "- [Neural Networks](https://www.codementor.io/@james_aka_yale/a-gentle-introduction-to-neural-networks-for-machine-learning-hkijvz7lp)" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "**_Enes Çavuş_**" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": null, 111 | "metadata": {}, 112 | "outputs": [], 113 | "source": [] 114 | } 115 | ], 116 | "metadata": { 117 | "kernelspec": { 118 | "display_name": "Python 3", 119 | "language": "python", 120 | "name": "python3" 121 | }, 122 | "language_info": { 123 | "codemirror_mode": { 124 | "name": "ipython", 125 | "version": 3 126 | }, 127 | "file_extension": ".py", 128 | "mimetype": "text/x-python", 129 | "name": "python", 130 | "nbconvert_exporter": "python", 131 | "pygments_lexer": "ipython3", 132 | "version": "3.7.6" 133 | } 134 | }, 135 | "nbformat": 4, 136 | "nbformat_minor": 4 137 | } 138 | -------------------------------------------------------------------------------- /Week3/Classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Classification" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Hatırlatma!\n", 15 | " - Makine Öğrenmesi\n", 16 | " \n", 17 | " - Supervised learning\n", 18 | " - Regresssion\n", 19 | " - Classification\n", 20 | " - Unsupervised\n", 21 | " - Clustering\n", 22 | " - Association" 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "### Sınıflandırmayı daha iyi anlayabilmek için Regresyon ile arasındaki farkları inceleyerek başlayalım." 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "- Sınıflandırma **ayrık** veriler üzerinde çalışırken regresyon probremlerinde **sürekli** veriler üzerinde çalışılır\n", 37 | "- Sınıflandırma **sıralanmamış, dağınık** veriler ile, regresyon ise belli bir **düzene sahip, sıralanmış** veriler üzerinde işlem yapar\n", 38 | "- Model değerlendirme yöntemlerinde sınıflandırma algoritmalarında **'confusion matrix, accuracy, precision, recall, F1 score** gibi değerlendirme yöntemleri varken regresyonda **'mean squared error ( loss )'** kullanılır. (Burayı okuyorsanız bu terimlere aşina olmalısınız.)\n", 39 | "- Sınıflandırmada **kategorik** verilerle (spam, not spam, canser, not canser) , regresyonda ise **numeric** verilerle (click_count, median_house_value) çalışılır.\n", 40 | "\n" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "Sınıflandırmada kullanılan Threshold değeri nedir?\n", 48 | "\n", 49 | "**Eşik değer** dediğimiz threshold, algortimamızın tahminlerinde kullanılır. Örneğin **spam** ya da **spam değil** diye tahminlerde bulunabilen bir algoritmamız var ve bu algoritma **0 - 1** arasında değerler tahmin ediyor. Yani **1 = 100% spam** , **0 = 0% spam değil** gibi. Eğer **0.48** ise ne yapacağız?. Burada algoritmamıza _\"Eşik değeri olarak 0.5 al ve bundan büyük veya eşit olanları \"spam\", küçük olanları \"not spam\" olarak bize döndür\"_ diyebiliriz. " 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "### **Confusion Matrix | True & False , Positive & Negative | Accuracy - Recall - Precision**\n", 57 | "\n", 58 | "\n", 59 | "Karşılaştırma kısmında bahsettiğim metrikler burada karşımıza çıkıyor, hepsi bir arada, tek bir şeye bağlı : **confusion matrix**\n", 60 | "\n", 61 | "\n", 62 | "\n", 63 | "\n", 64 | "Nedir bu confusion matrix?\n", 65 | "\n", 66 | "Confusion matrix, algoritmamızın bize ne kadar doğru ne kadar yanlış sonuçlar döndürüğünü tek bir karede gösterebilen matristir.\n", 67 | "\n", 68 | "\n", 69 | "![TPFN](images/TFPN.png)\n", 70 | "\n", 71 | "Görüldüğü üzere dört seçeneğimiz var. Bunları bir örnek ile anlatacağım.\n", 72 | "\n", 73 | "Elimizde örnek bir hikaye var : _Yalancı çoban_\n", 74 | "\n", 75 | "Çobanın iki seçeneği var: Kurt var , Kurt Yok\n", 76 | "\n", 77 | "Gerçekte iki seçenek var: Kurt Var , Kurt Yok\n", 78 | "\n", 79 | "\n", 80 | "Yani bu örnek 2 x 2 lik bir matris ile toplamda 4 olasılığımız olacak. (Bu 100 x 100 de olur bi sınır yok, elimizdeki özelliklere göre değişir.)\n", 81 | "\n", 82 | "---\n", 83 | "\n", 84 | "\n", 85 | "- True Positive ( TP ): Çoban Kurt VAR dedi ve gerçekten de kurt VAR. (Dürüst Çoban)\n", 86 | "- True Negative ( TN ): Çoban Kurt YOK dedi ve gerçekten de kurt YOK. (Dürüst Çoban)\n", 87 | "- False Positive ( FP ): Çoban kurt VAR dedi ama kurt YOK. (Yalancı Çoban)\n", 88 | "- False Negative ( FN ): Çoban kurt YOK dedi ama kurt VAR. (Yalancı Çoban)\n", 89 | "\n", 90 | "\n", 91 | "\n", 92 | "---\n", 93 | "\n", 94 | "\n", 95 | "![TPFN2](images/TFPN2.png)\n", 96 | "\n" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "### **Accuracy ( Doğruluk ) - Recall ( Duyarlılık ) - Precision ( Kesinlik )** " 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "### **Accuracy**\n", 111 | "\n", 112 | "Doğruluk, modelimizin doğru tahminlerinin tüm tahminlerine oranıdır. \n", 113 | "\n", 114 | "Burada özet geçtiğimden dolayı daha fazla detaya, verdiğim ek kaynaklardan, aynı zamanda kursun kendi kaynağından ulaşabilirsiniz.\n", 115 | "\n", 116 | "![accuracy](images/accuracy.png)\n", 117 | "\n", 118 | "---\n", 119 | "\n", 120 | "### **Recall**\n", 121 | "Çobanımız, kurt olan tüm zamanlara kıyasla kaç kez gerçekten kurt olup olmadığını söyledi? \n", 122 | "\n", 123 | "**Note:**Kritik alanlarda (hastalık teşhisi gibi), dikkate alınması gereken bir noktadır. \n", 124 | "![recall](images/Recall.png)\n", 125 | "\n", 126 | "---\n", 127 | "### **Precision**\n", 128 | "Çobanımız, kurt olsa da olmasa da kaç kere \"kurt var\" demiş? Çobanımızın dürüstlüğünü ölçebiliriz.\n", 129 | "\n", 130 | "\n", 131 | "![precision](images/Precision.png)\n", 132 | "\n", 133 | "---\n", 134 | "\n", 135 | "\n", 136 | "### **ALL in ONE** ( FN - FP konumları yukarıdaki örnekten farklı, lütfen ona dikkat edelim! )\n", 137 | "\n", 138 | "![allinone](images/allinone.png)\n" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": {}, 144 | "source": [ 145 | "### **ROC and AUC** \n", 146 | "\n", 147 | "Modelimizin özeti olarak düşünebiliriz. Daha fazla detay için [şuradan](https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc) konuyu inceleyebilirsiniz.\n", 148 | "\n" 149 | ] 150 | }, 151 | { 152 | "cell_type": "markdown", 153 | "metadata": {}, 154 | "source": [ 155 | "**_Ekler_**\n", 156 | "- [Classification](https://www.geeksforgeeks.org/ml-classification-vs-regression/?ref=rp)\n", 157 | "- [Confusion Matrix](https://towardsdatascience.com/understanding-confusion-matrix-a9ad42dcfd62)\n", 158 | "- [Türkçe ek kaynak](https://medium.com/data-science-tr/s%C4%B1n%C4%B1fland%C4%B1rma-modellerinde-ba%C5%9Far%C4%B1-kriterleri-2d86488799c6)" 159 | ] 160 | }, 161 | { 162 | "cell_type": "markdown", 163 | "metadata": {}, 164 | "source": [ 165 | "\n", 166 | "\n", 167 | "**_Enes Çavuş_**\n", 168 | "\n" 169 | ] 170 | } 171 | ], 172 | "metadata": { 173 | "kernelspec": { 174 | "display_name": "Python 3", 175 | "language": "python", 176 | "name": "python3" 177 | }, 178 | "language_info": { 179 | "codemirror_mode": { 180 | "name": "ipython", 181 | "version": 3 182 | }, 183 | "file_extension": ".py", 184 | "mimetype": "text/x-python", 185 | "name": "python", 186 | "nbconvert_exporter": "python", 187 | "pygments_lexer": "ipython3", 188 | "version": "3.7.6" 189 | } 190 | }, 191 | "nbformat": 4, 192 | "nbformat_minor": 4 193 | } 194 | -------------------------------------------------------------------------------- /Week3/L1_regularization.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Regularization for Sparsity: L₁ Regularization" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Bu bölümde L1 regularization üzerinde duracağız, daha net anlaşılabilmesi için L2 regularization ile aralarındaki farklara bakacağız." 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "## L1 vs L2 Regularization" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Bu iki yöntem overfitting problemi için çözüm üretmekte ama aralarında çok önemli bir fark var. \n", 29 | "\n", 30 | "**L2 regularization'da** bahsettiğim ağırlıkları cezalandırma olayı burada daha farklı işliyor.\n" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": {}, 36 | "source": [ 37 | "En önemli 2 farkı şöyle listeleyelim\n", 38 | "\n", 39 | "- L2 **ağırlıkların karesini** kullanarak işlem yapıyor L1 ise **ağırlıkların mutlak değerini** kullanarak işlem yapıyor.\n", 40 | "\n", 41 | "- L2 anlamsız ağırlık değerlerini **neredeyse** 0'a indiriyor; L1 ise anlamsız ağrılık değerlerini **tam olarak** 0'a indiriyor." 42 | ] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "![l1vsl2](images/l1vsl2.png)" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "Ek kaynaklar\n", 56 | "\n", 57 | "[Ek - 1](https://developers.google.com/machine-learning/crash-course/regularization-for-sparsity/l1-regularization)\n", 58 | "\n", 59 | "[Ek - 2](https://towardsdatascience.com/l1-and-l2-regularization-methods-ce25e7fc831c)" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "**_Enes Çavuş_**" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": null, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [] 75 | } 76 | ], 77 | "metadata": { 78 | "kernelspec": { 79 | "display_name": "Python 3", 80 | "language": "python", 81 | "name": "python3" 82 | }, 83 | "language_info": { 84 | "codemirror_mode": { 85 | "name": "ipython", 86 | "version": 3 87 | }, 88 | "file_extension": ".py", 89 | "mimetype": "text/x-python", 90 | "name": "python", 91 | "nbconvert_exporter": "python", 92 | "pygments_lexer": "ipython3", 93 | "version": "3.7.6" 94 | } 95 | }, 96 | "nbformat": 4, 97 | "nbformat_minor": 4 98 | } 99 | -------------------------------------------------------------------------------- /Week3/MultiClassNets.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Multi - Class Neural Nets" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### \"One vs All\" vs \"Softmax\"\n", 15 | "\n", 16 | "Şu ana kadar sadece bir output üzerinde çalıştık.\n", 17 | "\n", 18 | "Peki daha fazla output varsa ?\n", 19 | "\n", 20 | "Örneğin: Kedi , Köpek , Elma , Muz , Kitap ...\n", 21 | "\n", 22 | "Modele bir fotoğraf verelim ve yukarıdakilerden hangisine ait oldugunu bulsun?. Yüzeysel olarak incelenen bu konuda sadece output üzerinde anlatım yapılmış. İnceleyelim...\n", 23 | "\n", 24 | "**One vs All** baskınlığa dayalı bir yöntem. Resmimiz tahmin edilirken, köpek ağır basıyorsa diğer olasılıkları direkt eleyerek \"bu köpek\" diyecektir. \n", 25 | "\n", 26 | "\n", 27 | "![OnevsAll](images/OnevsAll.png)\n", 28 | "\n", 29 | "\n", 30 | "**Softmax** ise outputlarımız üzerinde tahmin yaparken **_olasılıklar_** döndürür. Yani **One vs All** normal linear regression ise **Softmax** logistic regression gibi düşünebilirsiniz. ( Sadece ouput farklarının anlaşılması için verdiğim bir örnek, yoksa tabii ki farklar var.)\n", 31 | "\n", 32 | "\n", 33 | "![Softmax](images/Softmax.png)\n" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "## Multi-Clas Nets [Colab Egzersizi](https://colab.research.google.com/github/google/eng-edu/blob/master/ml/cc/exercises/multi-class_classification_with_MNIST.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=multiclass_tf2-colab&hl=en)\n", 41 | "\n", 42 | "\n", 43 | "Not: Sadece önemli olduğunu düşündüğüm kodları ekliyorum. Dğier kısımlar önceki egzersizlerle aynı.\n", 44 | "\n", 45 | "\n", 46 | "\n", 47 | "Bu kodda farklı olarak\n", 48 | "\n", 49 | " - Keras kütüphanesinden \"Flatten\" fonksiyonu var. Bu fonksiyon resmimizin iki boyutlu (28 x 28 ) lik matrisi tek boyutlu ( 784 ) matris haline geritiyor ve verimizi modele aktarmamız çok daha kolaylaşıyor aynı zamanda modelin veriyi işlemesi de hızlanmış oluyor.\n", 50 | "\n", 51 | "\n", 52 | "- Aktivasyon olarak yine \"ReLU\" kullanıldıgını görüyoruz.\n", 53 | "\n", 54 | "- Farklı olarak \"Dropout\" fonskiyonu var. Nedir bu Dropout?\n", 55 | "\n", 56 | "Droput layer bir regularization işlemidir. L2 L1 da yaptığımız gibi, düğümlerimizin üzerinde ağırlıkları kontrol eder, anlamsız ve işe yaramayanların üzerinde işlem yapar. Overfitting probleminden kaçınmamızı sağlar. Daha fazlası için kaynak sondaki ektedir.\n", 57 | "\n", 58 | "- Son olarak ise \"Softmax\" output katmanımız. Görüldüğü üzere 10 farklı unit var demişiz çünkü veri setimiz MNIST yani 0 - 9 arasındaki değerler. \"Softmax\", tıpkı ReLU gibi activation olarak belirtiliyor. \n", 59 | "\n", 60 | "\n", 61 | "Sonraki eğitim aşamaları diğer örneklerimizde olduğu gibi devam etmektedir.\n" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "def create_model(my_learning_rate):\n", 71 | " \"\"\"Create and compile a deep neural net.\"\"\"\n", 72 | " \n", 73 | " # All models in this course are sequential.\n", 74 | " model = tf.keras.models.Sequential()\n", 75 | "\n", 76 | " # The features are stored in a two-dimensional 28X28 array. \n", 77 | " # Flatten that two-dimensional array into a a one-dimensional \n", 78 | " # 784-element array.\n", 79 | " model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))\n", 80 | "\n", 81 | " # Define the first hidden layer. \n", 82 | " model.add(tf.keras.layers.Dense(units=32, activation='relu'))\n", 83 | " \n", 84 | " # Define a dropout regularization layer. \n", 85 | " model.add(tf.keras.layers.Dropout(rate=0.2))\n", 86 | "\n", 87 | " # Define the output layer. The units parameter is set to 10 because\n", 88 | " # the model must choose among 10 possible output values (representing\n", 89 | " # the digits from 0 to 9, inclusive).\n", 90 | " #\n", 91 | " # Don't change this layer.\n", 92 | " model.add(tf.keras.layers.Dense(units=10, activation='softmax')) \n", 93 | " \n", 94 | " # Construct the layers into a model that TensorFlow can execute. \n", 95 | " # Notice that the loss function for multi-class classification\n", 96 | " # is different than the loss function for binary classification. \n", 97 | " model.compile(optimizer=tf.keras.optimizers.Adam(lr=my_learning_rate),\n", 98 | " loss=\"sparse_categorical_crossentropy\",\n", 99 | " metrics=['accuracy'])\n", 100 | " \n", 101 | " return model \n", 102 | "\n", 103 | "\n", 104 | "def train_model(model, train_features, train_label, epochs,\n", 105 | " batch_size=None, validation_split=0.1):\n", 106 | " \"\"\"Train the model by feeding it data.\"\"\"\n", 107 | "\n", 108 | " history = model.fit(x=train_features, y=train_label, batch_size=batch_size,\n", 109 | " epochs=epochs, shuffle=True, \n", 110 | " validation_split=validation_split)\n", 111 | " \n", 112 | " # To track the progression of training, gather a snapshot\n", 113 | " # of the model's metrics at each epoch. \n", 114 | " epochs = history.epoch\n", 115 | " hist = pd.DataFrame(history.history)\n", 116 | "\n", 117 | " return epochs, hist " 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "Ek kaynaklar\n", 125 | "- [One vs All](https://developers.google.com/machine-learning/crash-course/multi-class-neural-networks/one-vs-all)\n", 126 | "- [Softmax](https://developers.google.com/machine-learning/crash-course/multi-class-neural-networks/softmax)\n", 127 | "-[Dropout](https://medium.com/@amarbudhiraja/https-medium-com-amarbudhiraja-learning-less-to-learn-better-dropout-in-deep-machine-learning-74334da4bfc5)" 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "metadata": {}, 133 | "source": [ 134 | "**_Enes Çavuş_**" 135 | ] 136 | } 137 | ], 138 | "metadata": { 139 | "kernelspec": { 140 | "display_name": "Python 3", 141 | "language": "python", 142 | "name": "python3" 143 | }, 144 | "language_info": { 145 | "codemirror_mode": { 146 | "name": "ipython", 147 | "version": 3 148 | }, 149 | "file_extension": ".py", 150 | "mimetype": "text/x-python", 151 | "name": "python", 152 | "nbconvert_exporter": "python", 153 | "pygments_lexer": "ipython3", 154 | "version": "3.7.6" 155 | } 156 | }, 157 | "nbformat": 4, 158 | "nbformat_minor": 4 159 | } 160 | -------------------------------------------------------------------------------- /Week3/NeuralNetsColab.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Neural Networks [ Colab Egzersizi](https://colab.research.google.com/github/google/eng-edu/blob/master/ml/cc/exercises/intro_to_neural_nets.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=intro_to_nn_tf2-colab&hl=en#scrollTo=Pu7R_ZpDopIj)\n", 8 | "\n", 9 | "Not: En verimli sonuç için colab üzerinde çalıştırınız. Lokal üzerinde denerseniz import veya sürüm hataları alabilirsiniz." 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "### Bu colab egzersizinde, daha önceden yapmış olduğumuz model eğitim aşamalarını bu kez nöral ağlar kullanarak yapmaya çalışacağız. Basit bir derin öğrenme ağı oluşturacak ve hiperparemetreleri üzerinde iyileştirmeler yapacağız." 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": {}, 22 | "source": [ 23 | "### Her zamanki gibi gerekli import işlemlerini yapıyoruz." 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": null, 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "#@title Run on TensorFlow 2.x\n", 33 | "%tensorflow_version 2.x\n", 34 | "from __future__ import absolute_import, division, print_function, unicode_literals" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "metadata": {}, 41 | "outputs": [], 42 | "source": [ 43 | "#@title Import relevant modules\n", 44 | "import numpy as np\n", 45 | "import pandas as pd\n", 46 | "import tensorflow as tf\n", 47 | "from tensorflow.keras import layers\n", 48 | "from matplotlib import pyplot as plt\n", 49 | "import seaborn as sns\n", 50 | "\n", 51 | "# The following lines adjust the granularity of reporting. \n", 52 | "pd.options.display.max_rows = 10\n", 53 | "pd.options.display.float_format = \"{:.1f}\".format\n", 54 | "\n", 55 | "print(\"Imported modules.\")" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "### Diğer uygulamlarda olduğu gibi burada da \"house dataset\" i kullanıyoruz." 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 3, 68 | "metadata": {}, 69 | "outputs": [], 70 | "source": [ 71 | "train_df = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\")\n", 72 | "train_df = train_df.reindex(np.random.permutation(train_df.index)) # shuffle the examples\n", 73 | "test_df = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\")" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "metadata": {}, 79 | "source": [ 80 | "### Normalizasyon\n", 81 | "\n", 82 | "Burada Z-skoru elde ediyoruz. Peki Z - Score neydi?\n", 83 | "\n", 84 | "**[(verimiz - verimizin ortalaması ) / standart sapma ]**\n", 85 | "\n", 86 | "Amacımız özelliklerimiz arasındaki dengesizlikleri gidermek. Örneğin bir özelliğimizin değerlerinin aralığı **100 - 200000** olsun bir diğeri **10 - 30** olsun. Bu problemleri ortadan kaldırıyoruz.\n", 87 | "\n", 88 | "[Daha fazlası icin](https://developers.google.com/machine-learning/data-prep/transform/normalization)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [ 97 | "#@title Convert raw values to their Z-scores \n", 98 | "\n", 99 | "# Calculate the Z-scores of each column in the training set:\n", 100 | "train_df_mean = train_df.mean()\n", 101 | "train_df_std = train_df.std()\n", 102 | "train_df_norm = (train_df - train_df_mean)/train_df_std\n", 103 | "\n", 104 | "# Calculate the Z-scores of each column in the test set.\n", 105 | "test_df_mean = test_df.mean()\n", 106 | "test_df_std = test_df.std()\n", 107 | "test_df_norm = (test_df - test_df_mean)/test_df_std\n", 108 | "\n", 109 | "print(\"Normalized the values.\")" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "### Feature tanımlama işlemleri\n", 117 | "\n", 118 | "Dikkat etmemiz gereken yerler.\n", 119 | "\n", 120 | "Binning ve feature cross yaptığımız kodlar. \n", 121 | "\n", 122 | "Bir önceki uygulamalarımızda da vardı zaten. Yeni bir şey yok.\n", 123 | "\n" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "metadata": {}, 130 | "outputs": [], 131 | "source": [ 132 | "# Create an empty list that will eventually hold all created feature columns.\n", 133 | "feature_columns = []\n", 134 | "\n", 135 | "# We scaled all the columns, including latitude and longitude, into their\n", 136 | "# Z scores. So, instead of picking a resolution in degrees, we're going\n", 137 | "# to use resolution_in_Zs. A resolution_in_Zs of 1 corresponds to \n", 138 | "# a full standard deviation. \n", 139 | "resolution_in_Zs = 0.3 # 3/10 of a standard deviation.\n", 140 | "\n", 141 | "# Create a bucket feature column for latitude.\n", 142 | "latitude_as_a_numeric_column = tf.feature_column.numeric_column(\"latitude\")\n", 143 | "latitude_boundaries = list(np.arange(int(min(train_df_norm['latitude'])), \n", 144 | " int(max(train_df_norm['latitude'])), \n", 145 | " resolution_in_Zs))\n", 146 | "latitude = tf.feature_column.bucketized_column(latitude_as_a_numeric_column, latitude_boundaries)\n", 147 | "\n", 148 | "# Create a bucket feature column for longitude.\n", 149 | "longitude_as_a_numeric_column = tf.feature_column.numeric_column(\"longitude\")\n", 150 | "longitude_boundaries = list(np.arange(int(min(train_df_norm['longitude'])), \n", 151 | " int(max(train_df_norm['longitude'])), \n", 152 | " resolution_in_Zs))\n", 153 | "longitude = tf.feature_column.bucketized_column(longitude_as_a_numeric_column, \n", 154 | " longitude_boundaries)\n", 155 | "\n", 156 | "# Create a feature cross of latitude and longitude.\n", 157 | "latitude_x_longitude = tf.feature_column.crossed_column([latitude, longitude], hash_bucket_size=100)\n", 158 | "crossed_feature = tf.feature_column.indicator_column(latitude_x_longitude)\n", 159 | "feature_columns.append(crossed_feature) \n", 160 | "\n", 161 | "# Represent median_income as a floating-point value.\n", 162 | "median_income = tf.feature_column.numeric_column(\"median_income\")\n", 163 | "feature_columns.append(median_income)\n", 164 | "\n", 165 | "# Represent population as a floating-point value.\n", 166 | "population = tf.feature_column.numeric_column(\"population\")\n", 167 | "feature_columns.append(population)\n", 168 | "\n", 169 | "# Convert the list of feature columns into a layer that will later be fed into\n", 170 | "# the model. \n", 171 | "my_feature_layer = tf.keras.layers.DenseFeatures(feature_columns)" 172 | ] 173 | }, 174 | { 175 | "cell_type": "markdown", 176 | "metadata": {}, 177 | "source": [ 178 | "### Plotting, sonuçlarımızı görselleştirmek için." 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": null, 184 | "metadata": {}, 185 | "outputs": [], 186 | "source": [ 187 | "#@title Define the plotting function.\n", 188 | "\n", 189 | "def plot_the_loss_curve(epochs, mse):\n", 190 | " \"\"\"Plot a curve of loss vs. epoch.\"\"\"\n", 191 | "\n", 192 | " plt.figure()\n", 193 | " plt.xlabel(\"Epoch\")\n", 194 | " plt.ylabel(\"Mean Squared Error\")\n", 195 | "\n", 196 | " plt.plot(epochs, mse, label=\"Loss\")\n", 197 | " plt.legend()\n", 198 | " plt.ylim([mse.min()*0.95, mse.max() * 1.03])\n", 199 | " plt.show() \n", 200 | "\n", 201 | "print(\"Defined the plot_the_loss_curve function.\")" 202 | ] 203 | }, 204 | { 205 | "cell_type": "markdown", 206 | "metadata": {}, 207 | "source": [ 208 | "### Standart linear model tanımlamalarımız" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": null, 214 | "metadata": {}, 215 | "outputs": [], 216 | "source": [ 217 | "#@title Define functions to create and train a linear regression model\n", 218 | "def create_model(my_learning_rate, feature_layer):\n", 219 | " \"\"\"Create and compile a simple linear regression model.\"\"\"\n", 220 | " # Most simple tf.keras models are sequential.\n", 221 | " model = tf.keras.models.Sequential()\n", 222 | "\n", 223 | " # Add the layer containing the feature columns to the model.\n", 224 | " model.add(feature_layer)\n", 225 | "\n", 226 | " # Add one linear layer to the model to yield a simple linear regressor.\n", 227 | " model.add(tf.keras.layers.Dense(units=1, input_shape=(1,)))\n", 228 | "\n", 229 | " # Construct the layers into a model that TensorFlow can execute.\n", 230 | " model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=my_learning_rate),\n", 231 | " loss=\"mean_squared_error\",\n", 232 | " metrics=[tf.keras.metrics.MeanSquaredError()])\n", 233 | "\n", 234 | " return model \n", 235 | "\n", 236 | "\n", 237 | "def train_model(model, dataset, epochs, batch_size, label_name):\n", 238 | " \"\"\"Feed a dataset into the model in order to train it.\"\"\"\n", 239 | "\n", 240 | " # Split the dataset into features and label.\n", 241 | " features = {name:np.array(value) for name, value in dataset.items()}\n", 242 | " label = np.array(features.pop(label_name))\n", 243 | " history = model.fit(x=features, y=label, batch_size=batch_size,\n", 244 | " epochs=epochs, shuffle=True)\n", 245 | "\n", 246 | " # Get details that will be useful for plotting the loss curve.\n", 247 | " epochs = history.epoch\n", 248 | " hist = pd.DataFrame(history.history)\n", 249 | " rmse = hist[\"mean_squared_error\"]\n", 250 | "\n", 251 | " return epochs, rmse \n", 252 | "\n", 253 | "print(\"Defined the create_model and train_model functions.\")" 254 | ] 255 | }, 256 | { 257 | "cell_type": "markdown", 258 | "metadata": {}, 259 | "source": [ 260 | "### Linear model için tuning işlemleri ve eğitim." 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": null, 266 | "metadata": {}, 267 | "outputs": [], 268 | "source": [ 269 | "# The following variables are the hyperparameters.\n", 270 | "learning_rate = 0.01\n", 271 | "epochs = 15\n", 272 | "batch_size = 1000\n", 273 | "label_name = \"median_house_value\"\n", 274 | "\n", 275 | "# Establish the model's topography.\n", 276 | "my_model = create_model(learning_rate, my_feature_layer)\n", 277 | "\n", 278 | "# Train the model on the normalized training set.\n", 279 | "epochs, mse = train_model(my_model, train_df_norm, epochs, batch_size, label_name)\n", 280 | "plot_the_loss_curve(epochs, mse)\n", 281 | "\n", 282 | "test_features = {name:np.array(value) for name, value in test_df_norm.items()}\n", 283 | "test_label = np.array(test_features.pop(label_name)) # isolate the label\n", 284 | "print(\"\\n Evaluate the linear regression model against the test set:\")\n", 285 | "my_model.evaluate(x = test_features, y = test_label, batch_size=batch_size)" 286 | ] 287 | }, 288 | { 289 | "cell_type": "markdown", 290 | "metadata": {}, 291 | "source": [ 292 | "## Derin öğrenme ağı tasarlama" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": {}, 298 | "source": [ 299 | "Asıl konumuz olan derin ağ modeli kısmına geldik.\n", 300 | "\n", 301 | "Üç önemli madde var:\n", 302 | "- Saklı katmanlar (Hidden layer)\n", 303 | "- Aktivasyon Fonksiyonu (ReLU)\n", 304 | "- Output katmanları\n", 305 | "\n", 306 | "Kod üzerinde yorumlar ile anlatmaya çalıştım...\n", 307 | "\n", 308 | "![nn](images/nn3.png)" 309 | ] 310 | }, 311 | { 312 | "cell_type": "code", 313 | "execution_count": 4, 314 | "metadata": {}, 315 | "outputs": [], 316 | "source": [ 317 | "def create_model(my_learning_rate, my_feature_layer):\n", 318 | " \"\"\"Create and compile a simple linear regression model.\"\"\"\n", 319 | " model = tf.keras.models.Sequential()\n", 320 | " model.add(my_feature_layer)\n", 321 | "\n", 322 | "\n", 323 | "\n", 324 | " # Dense layer nedir? Dense layer is the regular deeply connected neural network layer. It is most common and frequently used layer. Dense layer does the below operation on the input and return the output.\n", 325 | " # Resimdeki sarı düğümlerden oluşan inputtan sonra gelen katmanımız. Ama burada 3 değil 20 node var ve aktivasyon fonksiyonmuzda görüldüğü üzere ReLU seçilmiş. \n", 326 | " model.add(tf.keras.layers.Dense(units=20, \n", 327 | " activation='relu', \n", 328 | " name='Hidden1'))\n", 329 | " \n", 330 | " # Bu kez ise yine bir gizli katman ama 12 düğümle. Aktivasyon fonksiyonumuz yine ReLU.\n", 331 | " model.add(tf.keras.layers.Dense(units=12, \n", 332 | " activation='relu', \n", 333 | " name='Hidden2'))\n", 334 | " \n", 335 | " # Define the output layer. Bu örnekte sadece 1 outputumuz olduğundan ( median_house_value ), 1 tane output düğümümüz var\n", 336 | " model.add(tf.keras.layers.Dense(units=1, \n", 337 | " name='Output')) \n", 338 | " \n", 339 | " model.compile(optimizer=tf.keras.optimizers.Adam(lr=my_learning_rate),\n", 340 | " loss=\"mean_squared_error\",\n", 341 | " metrics=[tf.keras.metrics.MeanSquaredError()])\n", 342 | "\n", 343 | " return model" 344 | ] 345 | }, 346 | { 347 | "cell_type": "markdown", 348 | "metadata": {}, 349 | "source": [ 350 | "### Buradan sonra bilgiğimiz model train aşamaları ve hiperparametreler üzerinde yenilemeler yapıyoruz.\n", 351 | "\n", 352 | "### Bu konuyu daha iyi anlamak için **katman ekleme** , **düğüm sayılarını değiştirme** gibi pratikler yapabilir ve **loss** değerlerine göz gezdirebilirsiniz." 353 | ] 354 | }, 355 | { 356 | "cell_type": "code", 357 | "execution_count": null, 358 | "metadata": {}, 359 | "outputs": [], 360 | "source": [ 361 | "def train_model(model, dataset, epochs, label_name,\n", 362 | " batch_size=None):\n", 363 | " \"\"\"Train the model by feeding it data.\"\"\"\n", 364 | "\n", 365 | " # Split the dataset into features and label.\n", 366 | " features = {name:np.array(value) for name, value in dataset.items()}\n", 367 | " label = np.array(features.pop(label_name))\n", 368 | " history = model.fit(x=features, y=label, batch_size=batch_size,\n", 369 | " epochs=epochs, shuffle=True) \n", 370 | "\n", 371 | " # The list of epochs is stored separately from the rest of history.\n", 372 | " epochs = history.epoch\n", 373 | " \n", 374 | " # To track the progression of training, gather a snapshot\n", 375 | " # of the model's mean squared error at each epoch. \n", 376 | " hist = pd.DataFrame(history.history)\n", 377 | " mse = hist[\"mean_squared_error\"]\n", 378 | "\n", 379 | " return epochs, mse" 380 | ] 381 | }, 382 | { 383 | "cell_type": "code", 384 | "execution_count": null, 385 | "metadata": {}, 386 | "outputs": [], 387 | "source": [ 388 | "# The following variables are the hyperparameters.\n", 389 | "learning_rate = 0.01\n", 390 | "epochs = 20\n", 391 | "batch_size = 1000\n", 392 | "\n", 393 | "# Specify the label\n", 394 | "label_name = \"median_house_value\"\n", 395 | "\n", 396 | "# Establish the model's topography.\n", 397 | "my_model = create_model(learning_rate, my_feature_layer)\n", 398 | "\n", 399 | "# Train the model on the normalized training set. We're passing the entire\n", 400 | "# normalized training set, but the model will only use the features\n", 401 | "# defined by the feature_layer.\n", 402 | "epochs, mse = train_model(my_model, train_df_norm, epochs, \n", 403 | " label_name, batch_size)\n", 404 | "plot_the_loss_curve(epochs, mse)\n", 405 | "\n", 406 | "# After building a model against the training set, test that model\n", 407 | "# against the test set.\n", 408 | "test_features = {name:np.array(value) for name, value in test_df_norm.items()}\n", 409 | "test_label = np.array(test_features.pop(label_name)) # isolate the label\n", 410 | "print(\"\\n Evaluate the new model against the test set:\")\n", 411 | "my_model.evaluate(x = test_features, y = test_label, batch_size=batch_size)" 412 | ] 413 | }, 414 | { 415 | "cell_type": "markdown", 416 | "metadata": {}, 417 | "source": [ 418 | "Ek kaynaklar\n", 419 | "- [Course link](https://developers.google.com/machine-learning/crash-course/introduction-to-neural-networks/video-lecture)\n", 420 | "- [Colab Link](https://colab.research.google.com/github/google/eng-edu/blob/master/ml/cc/exercises/intro_to_neural_nets.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=intro_to_nn_tf2-colab&hl=en#scrollTo=hI7ojsL7nnBE)" 421 | ] 422 | }, 423 | { 424 | "cell_type": "markdown", 425 | "metadata": {}, 426 | "source": [ 427 | "**_Enes Çavuş_**" 428 | ] 429 | }, 430 | { 431 | "cell_type": "code", 432 | "execution_count": null, 433 | "metadata": {}, 434 | "outputs": [], 435 | "source": [] 436 | } 437 | ], 438 | "metadata": { 439 | "kernelspec": { 440 | "display_name": "Python 3", 441 | "language": "python", 442 | "name": "python3" 443 | }, 444 | "language_info": { 445 | "codemirror_mode": { 446 | "name": "ipython", 447 | "version": 3 448 | }, 449 | "file_extension": ".py", 450 | "mimetype": "text/x-python", 451 | "name": "python", 452 | "nbconvert_exporter": "python", 453 | "pygments_lexer": "ipython3", 454 | "version": "3.7.6" 455 | } 456 | }, 457 | "nbformat": 4, 458 | "nbformat_minor": 4 459 | } 460 | -------------------------------------------------------------------------------- /Week3/Neuralnetworks.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Neural Networks" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "**Neural network** nedir ?\n", 15 | "\n", 16 | "İnsan beynindeki nöronlardan esinlenerek bilgisayar ortamında geliştirilmiş makine öğrenmesi algoritmalarında yer alan yöntemlerde biridir.\n", 17 | "\n", 18 | "İnsan beyni inanılmaz derecede kompleks olduğundan gerçek anlamda yanına bile yaklaşamayan derin ağlar yine de inanılmaz işlere imza atıyor bu günlerde. \n", 19 | "\n", 20 | "İnsan beyninde milyonlarca bulunan nöronlar bilgisayar ortamında gerek hafıza gerek zaman gibi problemler yüzünden 10.000 ler civarında. Daha büyük çalışmalar var tabii ama hala geliştirme aşamalarında olduklarını görüyoruz okuyoruz.\n", 21 | "\n", 22 | "Neural Network için incelemek amaçlı aşağıdaki resme baktığımızda **perceptron** olarak adlandırılan yapıyı görmekteyiz. \n", 23 | "\n", 24 | "![percetron](images/perceptron.png)\n", 25 | "\n", 26 | "Yine lineer problemlerde olduğu gibi inputlarımız var. Hatta yine lineer problemlerde olduğu gibi ağırlık değerlerimiz de var. Ama ek olarak **activation function** ı görmekteyiz ki bu kısım çok önemli.\n", 27 | "\n", 28 | "**Aktivasyon fonksiyonu** ağımızın lineerligini non-linear hale dönüştürmeye yarıyor. Bunun detaylarına daha sonra ineceğiz.\n", 29 | "\n", 30 | "\n", 31 | "Şimd geneline değindik biraz daha detaya inmek için linear örneklerden non-linear'a doğru inceleyelim.\n" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "## Basit bir nöral ağ yapısı ve hidden layer\n", 39 | "\n", 40 | "\n", 41 | "Aşağıda gördüğünüz olabilecek en basit yapılardan birisi. \n", 42 | "\n", 43 | "Farklı olarak karşımıza çıkan şey ise **hidden layer**. \n", 44 | "\n", 45 | "Nedir bu hidden layer? \n", 46 | "\n", 47 | "Hidden layer'larda çarprazlama işlemleri yapılıyor. Ne işe yaradığı ise çok net. Verdiğimiz inputları mümkün olduğunca farklı ağırlıkları deneyerek sonuca ulaşma olasılığımızı optimum noktaya getirmek.\n", 48 | "\n", 49 | "\n", 50 | "![nn1](images/nn1.png)" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "Bu hidden layer'lardan istediğimiz kadar ekleyebileceğimiz gibi, içerdikleri düğüm sayılarını da istediğimiz kadar artırabiliriz. Bu da sonuca ulaşmamız için değerlendirememiz gereken olasık uzayını çok fazla genişletebilmemizi sağlıyor. " 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": {}, 63 | "source": [ 64 | "![nn2](images/nn2.png)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "markdown", 69 | "metadata": {}, 70 | "source": [ 71 | "Bu yukarıda gördükleriniz **linear** modellerdi. Hepsi sadece bir output düğümüne sahip. Şimdi yine bir output ama aktivasyon fonksiyonlu örneğini inceleyelim.\n", 72 | "\n", 73 | "Aşağıdaki resimde ise iki hidden layer arasında bir de aktivasyon fonksiyonumuz var. Başlangıçta da bahsettiğm üzere bu aktivasyon fonksiyonu bizim linear yapımızı non-linear hale getirecek olan şey.\n", 74 | "\n", 75 | "Bu fonksiyonu da eklediğinizde çok daha zor problemlerin üstesinden gelebilecek hale geliyorsunuz. \n", 76 | "\n", 77 | "Bu konuyu kurs üzerinden alıp ekleyeceğim, resimde inceleyebilirsiniz.\n", 78 | "\n", 79 | "\n", 80 | "![nn3](images/nn3.png)\n", 81 | "\n" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "![nn4](images/nn4.png)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "Ek Kaynaklar \n", 96 | "\n", 97 | "- [Google-original-page](https://developers.google.com/machine-learning/crash-course/introduction-to-neural-networks/anatomy)\n", 98 | "- [Neural Networks](https://www.codementor.io/@james_aka_yale/a-gentle-introduction-to-neural-networks-for-machine-learning-hkijvz7lp)" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "**_Enes Çavuş_**" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": null, 111 | "metadata": {}, 112 | "outputs": [], 113 | "source": [] 114 | } 115 | ], 116 | "metadata": { 117 | "kernelspec": { 118 | "display_name": "Python 3", 119 | "language": "python", 120 | "name": "python3" 121 | }, 122 | "language_info": { 123 | "codemirror_mode": { 124 | "name": "ipython", 125 | "version": 3 126 | }, 127 | "file_extension": ".py", 128 | "mimetype": "text/x-python", 129 | "name": "python", 130 | "nbconvert_exporter": "python", 131 | "pygments_lexer": "ipython3", 132 | "version": "3.7.6" 133 | } 134 | }, 135 | "nbformat": 4, 136 | "nbformat_minor": 4 137 | } 138 | -------------------------------------------------------------------------------- /Week3/images/.ipynb_checkpoints/nn2-checkpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/.ipynb_checkpoints/nn2-checkpoint.png -------------------------------------------------------------------------------- /Week3/images/.ipynb_checkpoints/nn3-checkpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/.ipynb_checkpoints/nn3-checkpoint.png -------------------------------------------------------------------------------- /Week3/images/.ipynb_checkpoints/nn4-checkpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/.ipynb_checkpoints/nn4-checkpoint.png -------------------------------------------------------------------------------- /Week3/images/.ipynb_checkpoints/perceptron-checkpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/.ipynb_checkpoints/perceptron-checkpoint.png -------------------------------------------------------------------------------- /Week3/images/Actual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/Actual.png -------------------------------------------------------------------------------- /Week3/images/F-Score.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/F-Score.png -------------------------------------------------------------------------------- /Week3/images/OnevsAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/OnevsAll.png -------------------------------------------------------------------------------- /Week3/images/Precision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/Precision.png -------------------------------------------------------------------------------- /Week3/images/Recall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/Recall.png -------------------------------------------------------------------------------- /Week3/images/Softmax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/Softmax.png -------------------------------------------------------------------------------- /Week3/images/TFPN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/TFPN.png -------------------------------------------------------------------------------- /Week3/images/TFPN2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/TFPN2.png -------------------------------------------------------------------------------- /Week3/images/accuracy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/accuracy.png -------------------------------------------------------------------------------- /Week3/images/allinone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/allinone.png -------------------------------------------------------------------------------- /Week3/images/l1vsl2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/l1vsl2.png -------------------------------------------------------------------------------- /Week3/images/nn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/nn1.png -------------------------------------------------------------------------------- /Week3/images/nn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/nn2.png -------------------------------------------------------------------------------- /Week3/images/nn3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/nn3.png -------------------------------------------------------------------------------- /Week3/images/nn4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/nn4.png -------------------------------------------------------------------------------- /Week3/images/perceptron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week3/images/perceptron.png -------------------------------------------------------------------------------- /Week4/.ipynb_checkpoints/Embeddings-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Embeddings " 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Makine öğrenmesinde kategorik verileri numeric hale getirip algoritmalarımızı besleriz. Bunu yapmanın birçok yolu var, mesela one-hot encoding. 1 ve 0'lardan olusan birçok vektör oluşturuyoruz. Bu konuyu kursun bir önceki konularından hatırlıyoruz fakat bazen elimizde ayrık ve çok fazla sayıda kategorik veri olacak. Bu sayı milyonlarca bile olabilir. Bu kadar veriyi \"one-hot encoding\" yöntemi ile dönüştürmek pek mantıklı olmayacaktır. Burada inceleyceğmiz **embedding** ile çok daha iyi modeller eğitebiliriz. Peki nedir bu **embedding**?" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Embedding ile çok fazla sayıda olan özelliklerimizi, belirlediğmiz boyut sayısınca gruplandırarak sınırlandırıyoruz. Bu şekilde verimizin kontrol altına alınmasına ve modelimizin daha iyi tahminlerde bulunmasına olanak sağlıyoruz.\n", 22 | "\n", 23 | "Önce 1D ( bir boyutlu ) örneğimize bakalım. \n", 24 | "\n", 25 | "![1D](images/1D.png)" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "Görüldüğü üzere elimizde filmlerden oluşan bir veri setimiz var ve bunu bir boyuta yerlestirmeye çalıştık. Tabii ki çok basit ama konuyu anlamak için gayet güzel bir örnek. Burada,filmlerin izleyici kitlesinin yetişkinlik düzeyine göre soldan sağa ayırmaya çalıştığımızı görüyoruz. En solda çoçuklara hitap edenler, en sağda ise yetişkinlere doğru kaymış. Daha net anlamak için bir boyut daha artıralım ve farkı görelim. \n", 33 | "\n", 34 | "\n", 35 | "![2D](images/2D.png)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "Görüldüğü üzere boyut artırdığımızda çok daha mantıklı gruplamalar yapıldı. Film dünyası olarak baktığımızda birçok türden birçok kesime, birçok duyguya hitap eden filmler olduğundan dolayı birkaç boyut ile bu model eğitilemez fakat **embedding**i anlamak için iyi bir örnekti. Şimdi biraz da _nöral ağlar_ kısmına değinelim. Kod aşamasında nasıl bir yol izliyoruz, hangi algoritmayı kullanacağız inceleyelim. " 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "İnceleyeceğimiz algoritma Google tarafından geliştirilen **Word2vec** algoritması. Bu algoritma **_anlamsal olarak benzer olan kelimeleri geometrik olarak birbirine yakın vektörler haline getirerek haritalandırıyor_** Aşağıdaki fotoğrafta bu algoritmanın bir kitap öneri sistemi için yapmış olduğu geometrik gruplandırmayı görüyoruz. Kitap türlerinden benzer olanların birbirlerine yakınlıklarını gözlemleyebilirsiniz.\n", 50 | "\n", 51 | "\"We can take the original 37,000 dimensions of all the books on Wikipedia, map them to 50 dimensions using neural network embeddings, and then map them to 2 dimensions using TSNE.\"\n", 52 | "\n", 53 | "Yani 37.000 kitabı 50 boyuta indiriyoruz, görselleştirmek amaçlı olarak ise 2D hale getiriliyor. Google'ın öneri sistemlerinde ne kadar başarılı olduğunu görmekteyiz. işte görselin son hali..\n", 54 | "\n", 55 | "![word2vec](images/bookEmbedding.png)" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "Peki bu algoritma kod kısmında nasıl? Tasarımı nasıl ? kurs üzerinden görseller ile inceleyelim. \n", 63 | "\n", 64 | "\n", 65 | "Aşağıdaki görselde **Embedding** katmanını görüyoruz. 3 adet unit'ten oluşmakta ve bir çok inputu bu unit'lere vermekteyiz. Bu 3 unit ( düğüm ) ile ayrıca eklemeyi istediğimiz başka inputlar da bir diğer katman olan standart, her zaman karşımıza çıkabilecek bir gizli katmana veriliyor. En sonda ise bir onceki konularda değinmiş olduğumuz softmax katmanı var. Burada önemli olan embedding katmanındaki unit sayısı ve boyut belirlememiz.\n", 66 | "\n", 67 | "![EmbeddingsNN](images/EmbeddingsNN.png)" 68 | ] 69 | }, 70 | { 71 | "cell_type": "markdown", 72 | "metadata": {}, 73 | "source": [ 74 | "Boyut ve katmandaki unit sayısı arasındaki bağlantıyı anlamak için aşağıdaki resmi inceleyelim.\n", 75 | "\n", 76 | "Görüldüğü üzere boyut sayımız **Embedding katmanımızdaki unit sayımız** kadar olmakta. Burada filmleri düşünün ve biz bu filmeleri 3 boyuta sahip olacak şekilde koordinatlara yerleştiriyoruz. 2 boyutlu örneği hatırlarsanız orada (x , y) tarzında iki değer vardı elimizde. Yani orada iki unit'e sahip bir embedding katmanı kullanmış olmalıyız. \n", 77 | "\n", 78 | "Aşağıdakine dönersek burada 3 unit var ve biz bu kadar boyut ile filmimizi konumlandırmışız. \n", 79 | "\n", 80 | "\n", 81 | "Çok daha fazlası için ek kaynaklara linkler bırakıyorum." 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "![EmbeddingsWeight](images/EmbeddingsWeight.png)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "Ek Kaynaklar\n", 96 | "\n", 97 | "- [Google Course Link](https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture)\n", 98 | "\n", 99 | "- [Embeddings](https://towardsdatascience.com/neural-network-embeddings-explained-4d028e6f0526)" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "**_EnesÇavuş_**" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": null, 112 | "metadata": {}, 113 | "outputs": [], 114 | "source": [] 115 | } 116 | ], 117 | "metadata": { 118 | "kernelspec": { 119 | "display_name": "Python 3", 120 | "language": "python", 121 | "name": "python3" 122 | }, 123 | "language_info": { 124 | "codemirror_mode": { 125 | "name": "ipython", 126 | "version": 3 127 | }, 128 | "file_extension": ".py", 129 | "mimetype": "text/x-python", 130 | "name": "python", 131 | "nbconvert_exporter": "python", 132 | "pygments_lexer": "ipython3", 133 | "version": "3.7.6" 134 | } 135 | }, 136 | "nbformat": 4, 137 | "nbformat_minor": 4 138 | } 139 | -------------------------------------------------------------------------------- /Week4/.ipynb_checkpoints/Fairness-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Fairness" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Modelimizi eğitirken kullandığımız verilerde yanlılıklar olabilir? \n", 15 | "\n", 16 | "Ne demek istiyoruz? \n", 17 | "\n", 18 | "Kullandığımız her veri herkese hitap edemeyebilir. Her ülkeye, her topluluğa, her mevsime, her yüzyıla hitap edemeyebilir. \n", 19 | "\n", 20 | "Ya da modelimizi eğitirken yanlı verileri kullanmış olabiliriz. Bu yanlılıkların birçok çeşiti vardır. Biz birkaç tanesini ele alacağız.\n", 21 | "\n", 22 | "Not: Tamamladıktan sonra [**bu sorular**](https://developers.google.com/machine-learning/crash-course/fairness/check-your-understanding) üzerinde pratik yapınız." 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "### Yanlılık Çeşitleri" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "- **Reporting Bias:** Uç örneklerle modelimizi beslediğinizi düşünün! Örnek olarak -> kitaplar hakkında yorum yapmasını istediğimiz bir modelimiz olsun, sadece 5 ve 1 yıldız yorumları kullanarak modelinizi eğitirseniz o kitap hakkında sağlıklı tahminlerde bulunamayacaktır." 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "- **Automation Bias:** Otomatik sistemlerden elde edilen verilerle bir model eğitirseniz, verinin temin edildiği sisteme yanlılık duyan bir model olacaktır. Bu modeli gerçek dünyada ya da otomatik olmayan sistemlerdeki veriler üzerinde denersek tahminlerimizde kötü sonuçlar ile karşılaşabiliriz." 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "- **Selection Bias:**\n", 51 | " - **_Covarage Bias:_** Bir aracın gelecek satışları hakkında tahminde bulunmak isteyelim; bu tahmin için anketimizde sadece bu ürüne gelen müşteri yorumlarını dikkate alırsak sizce ne kadar sağlıklı sonuçlar elde ederiz? Mesela yeni bir aracın çıkması ve o araca gelen yorumlar bizim ele aldığımız araca etki etmez miydi?\n", 52 | " \n", 53 | " - **_Non-Response Bias:_** Bu kez farklı ürünlerden de yorumları modele dahil ettiğimizi düşünün ama bir diğer arac için müsterilerimizin büyük bir çoğunluğu ankete katılmamış. Model ister istemez diğer tarafa doğru kayacaktır.\n", 54 | " \n", 55 | " - **_Sampling Bias:_** Bu kez her şey yolunda gitti, araclarımıza aynı oranda anket katılımları aldık, fakat mühendisimiz eğitim için sadece belirli bir kısmın verisini kullandı. Hatırlarsanız verilerimiz karıştırmayı tercih ederiz ve mümkün olduğunca fazla veri kullanırız. Burada ise mühendisimiz belli bir veriyi kullanıyor ki bu veri yanlılığa sahip olabilir. Yani sadece belli bir kısma hitap eden yorumlardır ya da ilk aracımıza ait verileri ağırlıklı olarak kullanmıştır." 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "- **_Group Attribution Bias:_** ML Engineer'lar için bir CV inceleme modeli hazırlıyorsunuz. Siz seminerler veren, konferanslar yapan birisi olun. Bu model sizin konferanslarınıza katılanları direkt pozitif yorumluyor. Aynı şekilde katılmayanları da negatif yorumluyor. Diğer yeteneklere bakılmaksızın bu gruplama yanlış olur. İşte burada bir grup yanlılığı söz konusu." 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "- **Implicit Bias:** Asya bölgesindeki selamlaşma kültürünü biliyoruz. Öne eğilerek insanlar birbirlerine saygı ve sevgi göstergesi olarak selam vermektedir. Biz bu hareketleri selamlaşma olarak modelimize verelim ve eğitelim. Bu modeli farklı bir ülkede kullanmaya çalıştığımızda belki o ülkedeki selamlaşmayı yorumlayamayacak ya da yanlış yorumlayacaktır. Örneğin bazı yerlerde bu hareket selamlaşmadan ziyade itaat olarak yorumlanıyor olabilir. Ya da el sıkışma bizde selamlaşma iken bir başka ülkede çok farklı anlamlara geliyor olabiir. ( Bunlar sadece genellemedir, gerçeklik hakkında kesin bir şey söyleyemem. Konunun anlaşılması için örnek verilmiştir. ) Yani modelimiz bir yanlılık sergilemektedir." 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "Ek Kaynaklar\n", 77 | "\n", 78 | "- [Bias Çeşitleri - Course](https://developers.google.com/machine-learning/crash-course/fairness/types-of-bias)\n", 79 | "- [Video + Ekstra Bilgi](https://developers.google.com/machine-learning/fairness-overview)\n" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "**_Enes Çavuş_**" 87 | ] 88 | } 89 | ], 90 | "metadata": { 91 | "kernelspec": { 92 | "display_name": "Python 3", 93 | "language": "python", 94 | "name": "python3" 95 | }, 96 | "language_info": { 97 | "codemirror_mode": { 98 | "name": "ipython", 99 | "version": 3 100 | }, 101 | "file_extension": ".py", 102 | "mimetype": "text/x-python", 103 | "name": "python", 104 | "nbconvert_exporter": "python", 105 | "pygments_lexer": "ipython3", 106 | "version": "3.7.6" 107 | } 108 | }, 109 | "nbformat": 4, 110 | "nbformat_minor": 4 111 | } 112 | -------------------------------------------------------------------------------- /Week4/.ipynb_checkpoints/StaticDynamicVeDataDep-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Static ( Offline ) vs. Dynamic ( Online ) Training" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "**Static Model :** Bu modelimiz offline olarar eğitilir. Elimizdeki bütün veriyi modele veririz. Eğitilmiş bu modeli daha sonra uzun bir süre boyunca kullanabiliriz.\n", 15 | "\n", 16 | "Eğer zamanla değişmeyeceğine inandığınız veriler üzerinde çalışıyorsanız static modeli kullanabilirsiniz. \n", 17 | "\n", 18 | "\n", 19 | "**_Artıları_:** \n", 20 | "\n", 21 | "- Maliyeti dert etmeye gerek yok çünkü bir kez eğitip sürekli kullanabilirsiniz.\n", 22 | "- Büyük verileri alıp bir kerede işleyebilirsiniz.\n", 23 | "- Tahminlerden önce doğrulama şansımız vardır.\n", 24 | "\n", 25 | "**_Eksileri_:** \n", 26 | "\n", 27 | "- Sadece bugüne kadar bildiğimiz, elde ettiğimiz veriler üzerinde sağlıklı çıkarımlar yapabilecektir.\n", 28 | "\n", 29 | "\n", 30 | "\n", 31 | "--- \n", 32 | "\n", 33 | "\n", 34 | "\n", 35 | "**Dynamic Model :** Bu modelimiz online ( sürekli ) olarak eğitilir. Modele sürekli olarak güncel veri akışı vardır. \n", 36 | "\n", 37 | "Günümüzdeki veriler her geçen gün - ay - yıl değişebilmektedir ve bazı şeylerin değeri artarken bazılarının ise azalabilmektedir. Bu gibi durumlarda kendini sürekli güncelleme özelliğine sahip Dynamic modeli kullanabilirsiniz. \n", 38 | "\n", 39 | "**_Artıları_:**\n", 40 | "\n", 41 | "- Değişen veriler ile uğraşırken uzun süre boyunca kullanabilirsiniz.\n", 42 | "\n", 43 | "**_Eksileri_:** \n", 44 | "\n", 45 | "- Sürekli gözlemlenmesi gerekebilir çünkü verilerimiz sürekli değişebilmektedir.\n", 46 | "\n", 47 | "\n", 48 | "\n", 49 | "---\n", 50 | "---\n" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "# Data Dependencies" 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": {}, 63 | "source": [ 64 | "Veriye bağımlılık olarak çevirebiliriz. Modelimizi besleyeceğimiz verileri gözden geçirmek her zaman önemlidir çünkü ne verirsek onu alıyoruz. Gerçekçi ve anlamlı veriler ile eğitim yapmalıyız. Birkaç kriteri birlikte inceleyelim: \n", 65 | "\n", 66 | "- **Güvenilirlik:** Verilerimiz güvenilir bir kaynaktan mı alınıyor ? \n", 67 | "- **Versiyonlama:** Tüm ihtimalleri hesapladık mı, yoksa verilemiz gelecekte değişkenlik gösterebilir mi, ya da sadece belli bir dönemin verileri mi var elimizde? Dikkat etmemiz gerekli!\n", 68 | "- **Gereklilik:** Regularization'ı hatırlayın! belki de bazı özelliklerimiz modelimiz için gerekli değildir hatta zararlı etki bile bırakabilir?\n", 69 | "- **Bağlılık:** Herhangi birkaç özelliğimiz arasında ilişkiler var mı? Bu özellikler birbirine nasıl etkide bulunuyor? Pozitif? Negatif?\n", 70 | "\n", 71 | "Bu gibi kriterleri kullanarak modelimize veriyi vermeden önce bir göz gezdirip veride temizlik, güncelleme yapmamız gereklidir." 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "Ek Kaynaklar\n", 79 | "\n", 80 | "- [Static vs Dynamic](https://developers.google.com/machine-learning/crash-course/static-vs-dynamic-training/video-lecture)\n", 81 | "- [Data Dependencies](https://developers.google.com/machine-learning/crash-course/data-dependencies/video-lecture)" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "**_Enes Çavuş_**" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [] 97 | } 98 | ], 99 | "metadata": { 100 | "kernelspec": { 101 | "display_name": "Python 3", 102 | "language": "python", 103 | "name": "python3" 104 | }, 105 | "language_info": { 106 | "codemirror_mode": { 107 | "name": "ipython", 108 | "version": 3 109 | }, 110 | "file_extension": ".py", 111 | "mimetype": "text/x-python", 112 | "name": "python", 113 | "nbconvert_exporter": "python", 114 | "pygments_lexer": "ipython3", 115 | "version": "3.7.6" 116 | } 117 | }, 118 | "nbformat": 4, 119 | "nbformat_minor": 4 120 | } 121 | -------------------------------------------------------------------------------- /Week4/Embeddings.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Embeddings " 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Makine öğrenmesinde kategorik verileri numeric hale getirip algoritmalarımızı besleriz. Bunu yapmanın birçok yolu var, mesela one-hot encoding. 1 ve 0'lardan olusan birçok vektör oluşturuyoruz. Bu konuyu kursun bir önceki konularından hatırlıyoruz fakat bazen elimizde ayrık ve çok fazla sayıda kategorik veri olacak. Bu sayı milyonlarca bile olabilir. Bu kadar veriyi \"one-hot encoding\" yöntemi ile dönüştürmek pek mantıklı olmayacaktır. Burada inceleyceğmiz **embedding** ile çok daha iyi modeller eğitebiliriz. Peki nedir bu **embedding**?" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "Embedding ile çok fazla sayıda olan özelliklerimizi, belirlediğmiz boyut sayısınca gruplandırarak sınırlandırıyoruz. Bu şekilde verimizin kontrol altına alınmasına ve modelimizin daha iyi tahminlerde bulunmasına olanak sağlıyoruz.\n", 22 | "\n", 23 | "Önce 1D ( bir boyutlu ) örneğimize bakalım. \n", 24 | "\n", 25 | "![1D](images/1D.png)" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "Görüldüğü üzere elimizde filmlerden oluşan bir veri setimiz var ve bunu bir boyuta yerlestirmeye çalıştık. Tabii ki çok basit ama konuyu anlamak için gayet güzel bir örnek. Burada,filmlerin izleyici kitlesinin yetişkinlik düzeyine göre soldan sağa ayırmaya çalıştığımızı görüyoruz. En solda çoçuklara hitap edenler, en sağda ise yetişkinlere doğru kaymış. Daha net anlamak için bir boyut daha artıralım ve farkı görelim. \n", 33 | "\n", 34 | "\n", 35 | "![2D](images/2D.png)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "markdown", 40 | "metadata": {}, 41 | "source": [ 42 | "Görüldüğü üzere boyut artırdığımızda çok daha mantıklı gruplamalar yapıldı. Film dünyası olarak baktığımızda birçok türden birçok kesime, birçok duyguya hitap eden filmler olduğundan dolayı birkaç boyut ile bu model eğitilemez fakat **embedding**i anlamak için iyi bir örnekti. Şimdi biraz da _nöral ağlar_ kısmına değinelim. Kod aşamasında nasıl bir yol izliyoruz, hangi algoritmayı kullanacağız inceleyelim. " 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "İnceleyeceğimiz algoritma Google tarafından geliştirilen **Word2vec** algoritması. Bu algoritma **_anlamsal olarak benzer olan kelimeleri geometrik olarak birbirine yakın vektörler haline getirerek haritalandırıyor_** Aşağıdaki fotoğrafta bu algoritmanın bir kitap öneri sistemi için yapmış olduğu geometrik gruplandırmayı görüyoruz. Kitap türlerinden benzer olanların birbirlerine yakınlıklarını gözlemleyebilirsiniz.\n", 50 | "\n", 51 | "\"We can take the original 37,000 dimensions of all the books on Wikipedia, map them to 50 dimensions using neural network embeddings, and then map them to 2 dimensions using TSNE.\"\n", 52 | "\n", 53 | "Yani 37.000 kitabı 50 boyuta indiriyoruz, görselleştirmek amaçlı olarak ise 2D hale getiriliyor. Google'ın öneri sistemlerinde ne kadar başarılı olduğunu görmekteyiz. işte görselin son hali..\n", 54 | "\n", 55 | "![word2vec](images/bookEmbedding.png)" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "Peki bu algoritma kod kısmında nasıl? Tasarımı nasıl ? kurs üzerinden görseller ile inceleyelim. \n", 63 | "\n", 64 | "\n", 65 | "Aşağıdaki görselde **Embedding** katmanını görüyoruz. 3 adet unit'ten oluşmakta ve bir çok inputu bu unit'lere vermekteyiz. Bu 3 unit ( düğüm ) ile ayrıca eklemeyi istediğimiz başka inputlar da bir diğer katman olan standart, her zaman karşımıza çıkabilecek bir gizli katmana veriliyor. En sonda ise bir onceki konularda değinmiş olduğumuz softmax katmanı var. Burada önemli olan embedding katmanındaki unit sayısı ve boyut belirlememiz.\n", 66 | "\n", 67 | "![EmbeddingsNN](images/EmbeddingsNN.png)" 68 | ] 69 | }, 70 | { 71 | "cell_type": "markdown", 72 | "metadata": {}, 73 | "source": [ 74 | "Boyut ve katmandaki unit sayısı arasındaki bağlantıyı anlamak için aşağıdaki resmi inceleyelim.\n", 75 | "\n", 76 | "Görüldüğü üzere boyut sayımız **Embedding katmanımızdaki unit sayımız** kadar olmakta. Burada filmleri düşünün ve biz bu filmeleri 3 boyuta sahip olacak şekilde koordinatlara yerleştiriyoruz. 2 boyutlu örneği hatırlarsanız orada (x , y) tarzında iki değer vardı elimizde. Yani orada iki unit'e sahip bir embedding katmanı kullanmış olmalıyız. \n", 77 | "\n", 78 | "Aşağıdakine dönersek burada 3 unit var ve biz bu kadar boyut ile filmimizi konumlandırmışız. \n", 79 | "\n", 80 | "\n", 81 | "Çok daha fazlası için ek kaynaklara linkler bırakıyorum." 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "![EmbeddingsWeight](images/EmbeddingsWeight.png)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "Ek Kaynaklar\n", 96 | "\n", 97 | "- [Google Course Link](https://developers.google.com/machine-learning/crash-course/embeddings/video-lecture)\n", 98 | "\n", 99 | "- [Embeddings](https://towardsdatascience.com/neural-network-embeddings-explained-4d028e6f0526)" 100 | ] 101 | }, 102 | { 103 | "cell_type": "markdown", 104 | "metadata": {}, 105 | "source": [ 106 | "**_EnesÇavuş_**" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": null, 112 | "metadata": {}, 113 | "outputs": [], 114 | "source": [] 115 | } 116 | ], 117 | "metadata": { 118 | "kernelspec": { 119 | "display_name": "Python 3", 120 | "language": "python", 121 | "name": "python3" 122 | }, 123 | "language_info": { 124 | "codemirror_mode": { 125 | "name": "ipython", 126 | "version": 3 127 | }, 128 | "file_extension": ".py", 129 | "mimetype": "text/x-python", 130 | "name": "python", 131 | "nbconvert_exporter": "python", 132 | "pygments_lexer": "ipython3", 133 | "version": "3.7.6" 134 | } 135 | }, 136 | "nbformat": 4, 137 | "nbformat_minor": 4 138 | } 139 | -------------------------------------------------------------------------------- /Week4/Fairness.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Fairness" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Modelimizi eğitirken kullandığımız verilerde yanlılıklar olabilir? \n", 15 | "\n", 16 | "Ne demek istiyoruz? \n", 17 | "\n", 18 | "Kullandığımız her veri herkese hitap edemeyebilir. Her ülkeye, her topluluğa, her mevsime, her yüzyıla hitap edemeyebilir. \n", 19 | "\n", 20 | "Ya da modelimizi eğitirken yanlı verileri kullanmış olabiliriz. Bu yanlılıkların birçok çeşiti vardır. Biz birkaç tanesini ele alacağız.\n", 21 | "\n", 22 | "Not: Tamamladıktan sonra [**bu sorular**](https://developers.google.com/machine-learning/crash-course/fairness/check-your-understanding) üzerinde pratik yapınız." 23 | ] 24 | }, 25 | { 26 | "cell_type": "markdown", 27 | "metadata": {}, 28 | "source": [ 29 | "### Yanlılık Çeşitleri" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "- **Reporting Bias:** Uç örneklerle modelimizi beslediğinizi düşünün! Örnek olarak -> kitaplar hakkında yorum yapmasını istediğimiz bir modelimiz olsun, sadece 5 ve 1 yıldız yorumları kullanarak modelinizi eğitirseniz o kitap hakkında sağlıklı tahminlerde bulunamayacaktır." 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "- **Automation Bias:** Otomatik sistemlerden elde edilen verilerle bir model eğitirseniz, verinin temin edildiği sisteme yanlılık duyan bir model olacaktır. Bu modeli gerçek dünyada ya da otomatik olmayan sistemlerdeki veriler üzerinde denersek tahminlerimizde kötü sonuçlar ile karşılaşabiliriz." 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "- **Selection Bias:**\n", 51 | " - **_Covarage Bias:_** Bir aracın gelecek satışları hakkında tahminde bulunmak isteyelim; bu tahmin için anketimizde sadece bu ürüne gelen müşteri yorumlarını dikkate alırsak sizce ne kadar sağlıklı sonuçlar elde ederiz? Mesela yeni bir aracın çıkması ve o araca gelen yorumlar bizim ele aldığımız araca etki etmez miydi?\n", 52 | " \n", 53 | " - **_Non-Response Bias:_** Bu kez farklı ürünlerden de yorumları modele dahil ettiğimizi düşünün ama bir diğer arac için müsterilerimizin büyük bir çoğunluğu ankete katılmamış. Model ister istemez diğer tarafa doğru kayacaktır.\n", 54 | " \n", 55 | " - **_Sampling Bias:_** Bu kez her şey yolunda gitti, araclarımıza aynı oranda anket katılımları aldık, fakat mühendisimiz eğitim için sadece belirli bir kısmın verisini kullandı. Hatırlarsanız verilerimiz karıştırmayı tercih ederiz ve mümkün olduğunca fazla veri kullanırız. Burada ise mühendisimiz belli bir veriyi kullanıyor ki bu veri yanlılığa sahip olabilir. Yani sadece belli bir kısma hitap eden yorumlardır ya da ilk aracımıza ait verileri ağırlıklı olarak kullanmıştır." 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "- **_Group Attribution Bias:_** ML Engineer'lar için bir CV inceleme modeli hazırlıyorsunuz. Siz seminerler veren, konferanslar yapan birisi olun. Bu model sizin konferanslarınıza katılanları direkt pozitif yorumluyor. Aynı şekilde katılmayanları da negatif yorumluyor. Diğer yeteneklere bakılmaksızın bu gruplama yanlış olur. İşte burada bir grup yanlılığı söz konusu." 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "- **Implicit Bias:** Asya bölgesindeki selamlaşma kültürünü biliyoruz. Öne eğilerek insanlar birbirlerine saygı ve sevgi göstergesi olarak selam vermektedir. Biz bu hareketleri selamlaşma olarak modelimize verelim ve eğitelim. Bu modeli farklı bir ülkede kullanmaya çalıştığımızda belki o ülkedeki selamlaşmayı yorumlayamayacak ya da yanlış yorumlayacaktır. Örneğin bazı yerlerde bu hareket selamlaşmadan ziyade itaat olarak yorumlanıyor olabilir. Ya da el sıkışma bizde selamlaşma iken bir başka ülkede çok farklı anlamlara geliyor olabiir. ( Bunlar sadece genellemedir, gerçeklik hakkında kesin bir şey söyleyemem. Konunun anlaşılması için örnek verilmiştir. ) Yani modelimiz bir yanlılık sergilemektedir." 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "Ek Kaynaklar\n", 77 | "\n", 78 | "- [Bias Çeşitleri - Course](https://developers.google.com/machine-learning/crash-course/fairness/types-of-bias)\n", 79 | "- [Video + Ekstra Bilgi](https://developers.google.com/machine-learning/fairness-overview)\n" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "**_Enes Çavuş_**" 87 | ] 88 | } 89 | ], 90 | "metadata": { 91 | "kernelspec": { 92 | "display_name": "Python 3", 93 | "language": "python", 94 | "name": "python3" 95 | }, 96 | "language_info": { 97 | "codemirror_mode": { 98 | "name": "ipython", 99 | "version": 3 100 | }, 101 | "file_extension": ".py", 102 | "mimetype": "text/x-python", 103 | "name": "python", 104 | "nbconvert_exporter": "python", 105 | "pygments_lexer": "ipython3", 106 | "version": "3.7.6" 107 | } 108 | }, 109 | "nbformat": 4, 110 | "nbformat_minor": 4 111 | } 112 | -------------------------------------------------------------------------------- /Week4/StaticDynamicVeDataDep.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Static ( Offline ) vs. Dynamic ( Online ) Training" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "**Static Model :** Bu modelimiz offline olarar eğitilir. Elimizdeki bütün veriyi modele veririz. Eğitilmiş bu modeli daha sonra uzun bir süre boyunca kullanabiliriz.\n", 15 | "\n", 16 | "Eğer zamanla değişmeyeceğine inandığınız veriler üzerinde çalışıyorsanız static modeli kullanabilirsiniz. \n", 17 | "\n", 18 | "\n", 19 | "**_Artıları_:** \n", 20 | "\n", 21 | "- Maliyeti dert etmeye gerek yok çünkü bir kez eğitip sürekli kullanabilirsiniz.\n", 22 | "- Büyük verileri alıp bir kerede işleyebilirsiniz.\n", 23 | "- Tahminlerden önce doğrulama şansımız vardır.\n", 24 | "\n", 25 | "**_Eksileri_:** \n", 26 | "\n", 27 | "- Sadece bugüne kadar bildiğimiz, elde ettiğimiz veriler üzerinde sağlıklı çıkarımlar yapabilecektir.\n", 28 | "\n", 29 | "\n", 30 | "\n", 31 | "--- \n", 32 | "\n", 33 | "\n", 34 | "\n", 35 | "**Dynamic Model :** Bu modelimiz online ( sürekli ) olarak eğitilir. Modele sürekli olarak güncel veri akışı vardır. \n", 36 | "\n", 37 | "Günümüzdeki veriler her geçen gün - ay - yıl değişebilmektedir ve bazı şeylerin değeri artarken bazılarının ise azalabilmektedir. Bu gibi durumlarda kendini sürekli güncelleme özelliğine sahip Dynamic modeli kullanabilirsiniz. \n", 38 | "\n", 39 | "**_Artıları_:**\n", 40 | "\n", 41 | "- Değişen veriler ile uğraşırken uzun süre boyunca kullanabilirsiniz.\n", 42 | "\n", 43 | "**_Eksileri_:** \n", 44 | "\n", 45 | "- Sürekli gözlemlenmesi gerekebilir çünkü verilerimiz sürekli değişebilmektedir.\n", 46 | "\n", 47 | "\n", 48 | "\n", 49 | "---\n", 50 | "---\n" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "# Data Dependencies" 58 | ] 59 | }, 60 | { 61 | "cell_type": "markdown", 62 | "metadata": {}, 63 | "source": [ 64 | "Veriye bağımlılık olarak çevirebiliriz. Modelimizi besleyeceğimiz verileri gözden geçirmek her zaman önemlidir çünkü ne verirsek onu alıyoruz. Gerçekçi ve anlamlı veriler ile eğitim yapmalıyız. Birkaç kriteri birlikte inceleyelim: \n", 65 | "\n", 66 | "- **Güvenilirlik:** Verilerimiz güvenilir bir kaynaktan mı alınıyor ? \n", 67 | "- **Versiyonlama:** Tüm ihtimalleri hesapladık mı, yoksa verilemiz gelecekte değişkenlik gösterebilir mi, ya da sadece belli bir dönemin verileri mi var elimizde? Dikkat etmemiz gerekli!\n", 68 | "- **Gereklilik:** Regularization'ı hatırlayın! belki de bazı özelliklerimiz modelimiz için gerekli değildir hatta zararlı etki bile bırakabilir?\n", 69 | "- **Bağlılık:** Herhangi birkaç özelliğimiz arasında ilişkiler var mı? Bu özellikler birbirine nasıl etkide bulunuyor? Pozitif? Negatif?\n", 70 | "\n", 71 | "Bu gibi kriterleri kullanarak modelimize veriyi vermeden önce bir göz gezdirip veride temizlik, güncelleme yapmamız gereklidir." 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "Ek Kaynaklar\n", 79 | "\n", 80 | "- [Static vs Dynamic](https://developers.google.com/machine-learning/crash-course/static-vs-dynamic-training/video-lecture)\n", 81 | "- [Data Dependencies](https://developers.google.com/machine-learning/crash-course/data-dependencies/video-lecture)" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "**_Enes Çavuş_**" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": null, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [] 97 | } 98 | ], 99 | "metadata": { 100 | "kernelspec": { 101 | "display_name": "Python 3", 102 | "language": "python", 103 | "name": "python3" 104 | }, 105 | "language_info": { 106 | "codemirror_mode": { 107 | "name": "ipython", 108 | "version": 3 109 | }, 110 | "file_extension": ".py", 111 | "mimetype": "text/x-python", 112 | "name": "python", 113 | "nbconvert_exporter": "python", 114 | "pygments_lexer": "ipython3", 115 | "version": "3.7.6" 116 | } 117 | }, 118 | "nbformat": 4, 119 | "nbformat_minor": 4 120 | } 121 | -------------------------------------------------------------------------------- /Week4/images/1D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week4/images/1D.png -------------------------------------------------------------------------------- /Week4/images/2D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week4/images/2D.png -------------------------------------------------------------------------------- /Week4/images/EmbeddingsNN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week4/images/EmbeddingsNN.png -------------------------------------------------------------------------------- /Week4/images/EmbeddingsWeight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week4/images/EmbeddingsWeight.png -------------------------------------------------------------------------------- /Week4/images/bookEmbedding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enescavus/ML-crash-course-notes/373da0e6b4530816cb7ece262100fc971fff57be/Week4/images/bookEmbedding.png -------------------------------------------------------------------------------- /readme.MD: -------------------------------------------------------------------------------- 1 | # **Google's Machine Learning Crash Course Notes** 2 | 3 | ### Notlar 1 aylık süreç boyunca haftalık olarak güncellenmiştir. 4 | 5 | ### Bu kursta mentorluk programı ile bizlere yardımcı olan [Google Developers](https://twitter.com/googledevs), [Deep Learning Türkiye](https://twitter.com/deeplearningtr?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor) ve [Turkish AI Hub](https://twitter.com/TurkishAIHub) ailelerine teşekkür ediyorum. 6 | 7 | 8 | 9 | **_Not:_** Tüm notlar [bu kaynak](https://developers.google.com/machine-learning/crash-course/ml-intro)tan esinlenerek ve ek araştırmalardan yararlanarak hazırlanmıştır. Notlarda kullanılan kaynaklar her notebook sonuna eklenmiştir. 10 | 11 | --- 12 | 13 | 14 | ## Week 1 ( Tamamlandı ) 15 | 16 | - [Start - Framing](Week1/Framing.ipynb) 17 | - [Descending into ML](Week1/DescendingIntoML.ipynb) 18 | - [Reducing Loss with Tensorflow Exercise](Week1/RedLossAndTF.ipynb) 19 | - [Train - Test - Validation](Week1/TrainTestValidation.ipynb) 20 | 21 | 22 | --- 23 | 24 | 25 | ## Week 2 ( Tamamlandı ) 26 | 27 | - [Representation](Week2/Representation.ipynb) 28 | - [Feature Crosses](Week2/FeatureCrosses.ipynb) 29 | - [Regularization: Simplicity](Week2/Regularization.ipynb) 30 | - [Logistic Regression](Week2/LogisticRegression.ipynb) 31 | 32 | 33 | --- 34 | 35 | 36 | ## Week 3 ( Tamamlandı ) 37 | 38 | - [Classification](Week3/Classification.ipynb) 39 | - [Regularization: Sparsity ](Week3/L1_regularization.ipynb) 40 | - [Neural Networks](Week3/Neuralnetworks.ipynb) 41 | - [Neural Nets Colab Exercise](Week3/NeuralNetsColab.ipynb) 42 | - [Multi Class Neural Nets](Week3/MultiClassNets.ipynb) 43 | 44 | 45 | --- 46 | 47 | 48 | ## Week 4 ( Tamamlandı ) 49 | 50 | - [Embeddings](Week4/Embeddings.ipynb) 51 | - [Static vs. Dynamic - Dependencies [ ML Engineering ]](Week4/StaticDynamicVeDataDep.ipynb) 52 | - [Fairness [ ML Engineering ]](Week4/Fairness.ipynb) 53 | 54 | 55 | --- 56 | 57 | 58 | **_Enes Çavuş_** 59 | İletişim: [LinkedIn](https://www.linkedin.com/in/enes-%C3%A7avu%C5%9F-057376175) 60 | -------------------------------------------------------------------------------- /readmeSample.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# **Google's Machine Learning Crash Course Notes**\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Notlar 1 aylık süreç boyunca haftalık olarak güncellenmiştir. \n", 15 | "\n", 16 | "### Bu kursta mentorluk programı ile bizlere yardımcı olan [Google Developers](https://twitter.com/googledevs), [Deep Learning Türkiye](https://twitter.com/deeplearningtr?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor) ve [Turkish AI Hub](https://twitter.com/TurkishAIHub) ailelerine teşekkür ediyorum. \n", 17 | "\n", 18 | "\n", 19 | "\n", 20 | "**_Not:_** Tüm notlar [bu kaynak](https://developers.google.com/machine-learning/crash-course/ml-intro)tan esinlenerek ve ek araştırmalardan yararlanarak hazırlanmıştır. Notlarda kullanılan kaynaklar her notebook sonuna eklenmiştir. \n", 21 | "\n", 22 | "**_Not 2:_** Bu _repository_, klavye hatalarını düzeltmek ve notları daha yararlı hale getirmek amacıyla güncellenmektedir.\n", 23 | "\n", 24 | "---" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "## Week 1 ( Tamamlandı )\n", 32 | "\n", 33 | "- [Start - Framing](Week1/Framing.ipynb)\n", 34 | "- [Descending into ML](Week1/DescendingIntoML.ipynb)\n", 35 | "- [Reducing Loss with Tensorflow Exercise](Week1/RedLossAndTF.ipynb)\n", 36 | "- [Train - Test - Validation](Week1/TrainTestValidation.ipynb)\n", 37 | "\n", 38 | "---\n", 39 | "\n" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": {}, 45 | "source": [ 46 | "## Week 2 ( Tamamlandı )\n", 47 | "\n", 48 | "- [Representation](Week2/Representation.ipynb)\n", 49 | "- [Feature Crosses](Week2/FeatureCrosses.ipynb)\n", 50 | "- [Regularization: Simplicity](Week2/Regularization.ipynb)\n", 51 | "- [Logistic Regression](Week2/LogisticRegression.ipynb)\n", 52 | "\n", 53 | "---" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": {}, 59 | "source": [ 60 | "\n", 61 | "\n", 62 | "## Week 3 ( Tamamlandı )\n", 63 | "\n", 64 | "- [Classification](Week3/Classification.ipynb)\n", 65 | "- [Regularization: Sparsity ](Week3/L1_regularization.ipynb)\n", 66 | "- [Neural Networks](Week3/Neuralnetworks.ipynb)\n", 67 | "- [Neural Nets Colab Exercise](Week3/NeuralNetsColab.ipynb)\n", 68 | "- [Multi Class Neural Nets](Week3/MultiClassNets.ipynb)\n", 69 | "---" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "\n", 77 | "## Week 4 ( Tamamlandı )\n", 78 | "\n", 79 | "- [Embeddings](Week4/Embeddings.ipynb)\n", 80 | "- [Static vs. Dynamic - Dependencies [ ML Engineering ]](Week4/StaticDynamicVeDataDep.ipynb)\n", 81 | "- [Fairness [ ML Engineering ]](Week4/Fairness.ipynb)\n", 82 | "\n", 83 | "---" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "\n", 91 | "**_Enes Çavuş_** \n", 92 | "İletişim: [LinkedIn](https://www.linkedin.com/in/enes-%C3%A7avu%C5%9F-057376175)\n" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": null, 98 | "metadata": {}, 99 | "outputs": [], 100 | "source": [] 101 | } 102 | ], 103 | "metadata": { 104 | "kernelspec": { 105 | "display_name": "Python 3", 106 | "language": "python", 107 | "name": "python3" 108 | }, 109 | "language_info": { 110 | "codemirror_mode": { 111 | "name": "ipython", 112 | "version": 3 113 | }, 114 | "file_extension": ".py", 115 | "mimetype": "text/x-python", 116 | "name": "python", 117 | "nbconvert_exporter": "python", 118 | "pygments_lexer": "ipython3", 119 | "version": "3.7.6" 120 | } 121 | }, 122 | "nbformat": 4, 123 | "nbformat_minor": 4 124 | } 125 | --------------------------------------------------------------------------------