Derin Öğrenme (Deep Learning) - Regresyon Örnekleri

Lisansüstü Eğitime Kabul Tahmini

Yayın tarihi :28-Şub-22
Bölüm kodlarını ve/veya veri setlerini indir.

Konu: Hindistanda bulunan üniversitelerin Lisansüstü programına kabul şansı yüzdesini Derin Öğrenme modeli ile tahmin etmek.

Veri seti: 500x 9 (satır x sütun) elemanı bulunan  "Admission_Predict_Ver1.1.csv" veri setidir. Veri setinde bulunan değişkenler;

  • GRE Puanları ( 340 üzerinden )
  • TOEFL Puanları (120 üzerinden)
  • Üniversite Puanı ( 5 üzerinden )
  • Amaç Beyanı ve Tavsiye Mektubu Mukavemet (5 üzerinden)
  • Lisans not ortalaması (10 üzerinden)
  • Araştırma Deneyimi ( 0 veya 1 )
  • Kabul Şansı (0'dan 1'e kadar)

Keşifsel Veri Analizi (EDA)

df=pd.read_csv("Admission_Predict_Ver1.1.csv")
df.head()

Çıktı:

df.tail()

Çıktı:

df.info()

Çıktı:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500 entries, 0 to 499
Data columns (total 9 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   Serial No.         500 non-null    int64  
 1   GRE Score          500 non-null    int64  
 2   TOEFL Score        500 non-null    int64  
 3   University Rating  500 non-null    int64  
 4   SOP                500 non-null    float64
 5   LOR                500 non-null    float64
 6   CGPA               500 non-null    float64
 7   Research           500 non-null    int64  
 8   Chance of Admit    500 non-null    float64
dtypes: float64(4), int64(5)
memory usage: 35.3 KB
df.shape

Çıktı:

(500, 9)
df.isnull().sum()

Çıktı:

Serial No.           0
GRE Score            0
TOEFL Score          0
University Rating    0
SOP                  0
LOR                  0
CGPA                 0
Research             0
Chance of Admit      0
dtype: int64

Veri seti hakkında gerekli olan sütun düzenlemelerini yaparak veri setini temizleyelim.

#Serial No. değeri sayısal olarak bir üstünlük belirtmediğinden kaldıralım
df.drop(["Serial No."],axis=1,inplace=True)

Veri setinin istatistik bilgilerini gözlemleyerek veri seti hakkında genel bir bilgi edinilir.

df.describe().T

Çıktı:

Veri setinde sütunların birbirleri ile olan korelasyonu incelendi.

plt.figure(figsize=(15,10))
sns.heatmap(df.corr(),annot=True,linewidths=2)

Çıktı:

Veri setindeki sayısal değişkenler basit bir şekilde görselleştirildi.

df.hist(figsize=(15,10));

Çıktı:

Derin Öğrenme model oluşturma aşamaları ve işlemleri

#x(bağımsız) y(hedef) değişkeni tanımlanır
x,y=df.drop("Chance of Admit ",axis=1),df[["Chance of Admit "]]

#get_dummies ile kategorik değerler uygun hale getirilir
x=pd.get_dummies(x,drop_first=True)

#MinMaxScaler(x değerleri 0-1 aralığında) işlemi
X=MinMaxScaler().fit_transform(x)

#Son durumda X değerleri görünümü
pd.DataFrame(X,columns=x.columns).head()

Çıktı:

#Model giriş katmanı değeri(veri seti değişken sayısı)
n_cols=X.shape[1]

#Model oluşturularak katmanlar eklenir
model=Sequential()
model.add(Dense(512,activation='relu',input_shape=(n_cols,)))
model.add(Dense(256, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1,activation="linear"))

#Model derlenir
model.compile(optimizer="adam",loss="mse",metrics=["mse"])

#train ve test verileri tanımlanır
x_train,x_test,y_train,y_test=train_test_split(X,y,random_state=42,test_size=.2)

#Veri seti öğrenme işlemi yapılır
model.fit(x=x_train,y=y_train,batch_size=128,epochs=50,verbose=1,validation_data=(x_test,y_test))

Çıktı:

...
Epoch 48/50
4/4 [==============================] - 0s 12ms/step - loss: 0.0037 - mse: 0.0037 - val_loss: 0.0036 - val_mse: 0.0036
Epoch 49/50
4/4 [==============================] - 0s 13ms/step - loss: 0.0036 - mse: 0.0036 - val_loss: 0.0038 - val_mse: 0.0038
Epoch 50/50
4/4 [==============================] - 0s 12ms/step - loss: 0.0033 - mse: 0.0033 - val_loss: 0.0038 - val_mse: 0.0038
model.summary()

Çıktı:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense (Dense)               (None, 512)               4096      
                                                                 
 dense_1 (Dense)             (None, 256)               131328    
                                                                 
 dense_2 (Dense)             (None, 128)               32896     
                                                                 
 dense_3 (Dense)             (None, 64)                8256      
                                                                 
 dense_4 (Dense)             (None, 32)                2080      
                                                                 
 dense_5 (Dense)             (None, 16)                528       
                                                                 
 dense_6 (Dense)             (None, 8)                 136       
                                                                 
 dense_7 (Dense)             (None, 1)                 9         
                                                                 
=================================================================
Total params: 179,329
Trainable params: 179,329
Non-trainable params: 0

Model başarı değerlendirmesi

Veri setinin model ile eğitilmesi sonucu oluşan "mse" değerlerinin train ve test verilerinde göstermiş olduğu değerlerin grafiklemesine bakalım.

fig=plt.figure(figsize=(10,6))

#mse Grafiklemesi
plt.plot(model.history.history['mse'])
plt.plot(model.history.history['val_mse'])
plt.title('Mean Squared Error')
plt.ylabel('mse')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()

Çıktı:

Yukarıdaki grafik gösteriyorki train ve test verileri yaklaşık olarak birbirlerine benzer sonuçlar oluşturmuştur.

Model başarı yüzdesini görebilmek için "r2_score" kullanılabilir.

#x_test verileri tahminleme işlemi
pred=model.predict(x_test)

#r2_score değerinin yüzdelik gösterimi
r2_score(y_test,pred)*100

Çıktı:

81.58915120376551

Sonuç olarak; Derin Öğrenme modeli ile veri setine tahmin etme işlemi uygulandı ve %81,58 oranında başarı elde edilmiş oldu. Başarı oranı artırılmak istenebilir, bunun için birkaç adım denenebilir, bu adımlardan bazıları yüksek bilgisayar gücü gerektirebilecektir. Bunlar;

  • Veri seti temizlemesi daha iyi yapılabilir.
  • Model katmanlarına "Dropout" katmanları da eklenebilir.
  • Model gizli katmanları artırılabilir.
  • Gizli katmanlardaki nöron sayısı artırılabilir.
  • Model fit işleminde epoch değeri artırılabilir.

Gibi yukarıda sayılan işlemler yapıldığında model başarısı artırılabilecektir.

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.