{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "vscode": { "languageId": "plaintext" } }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout\n", "from tensorflow.keras.optimizers import Adam\n", "from sklearn.preprocessing import LabelEncoder\n", "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report, roc_auc_score, roc_curve\n", "import matplotlib.pyplot as plt\n", "import joblib\n", "\n", "# Veriyi yükle\n", "df = pd.read_csv('data_vectorized.csv')\n", "\n", "# Özellikler (X) ve Etiketler (y) ayırma\n", "X = df.drop(columns=['Label']) # Özellikler (vectorized data)\n", "y = df['Label'] # Etiketler (True/False)\n", "\n", "# Etiketleri sayılara dönüştürme (Label Encoding)\n", "le = LabelEncoder()\n", "y = le.fit_transform(y)\n", "\n", "# Eğitim ve test verilerini ayırma (%80 eğitim, %20 test)\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", "\n", "# Model Parametreleri\n", "embedding_dim = 100 # Embedding boyutu\n", "max_len = X.shape[1] # Veri uzunluğu (her kelimenin vektör boyutu)\n", "num_classes = len(np.unique(y)) # Sınıf sayısı (True/False)\n", "\n", "# LSTM Modeli oluşturma\n", "model = Sequential([\n", " Embedding(input_dim=len(X.columns) + 1, # Girdi boyutu, toplam kelime sayısı\n", " output_dim=embedding_dim, # Embedding vektör boyutu\n", " input_length=max_len), # Girdi uzunluğu\n", " Dropout(0.2), # Aşırı öğrenmeyi engellemek için dropout\n", " LSTM(128, activation='tanh'), # LSTM katmanı\n", " Dense(64, activation='relu'), # Tam bağlı katman\n", " Dense(num_classes, activation='softmax') # Çıkış katmanı (binary classification için softmax)\n", "])\n", "\n", "# Modeli derleme\n", "model.compile(loss='sparse_categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])\n", "\n", "# Modelin özetini görüntüleme\n", "model.summary()\n", "\n", "# Modeli eğitme\n", "history = model.fit(X_train, y_train, epochs=15, batch_size=64, validation_data=(X_test, y_test))\n", "\n", "# Eğitim ve doğrulama doğruluğunu görselleştirme\n", "plt.plot(history.history['accuracy'], label='Eğitim Doğruluğu')\n", "plt.plot(history.history['val_accuracy'], label='Doğrulama Doğruluğu')\n", "plt.title('Model Doğruluğu')\n", "plt.xlabel('Epok')\n", "plt.ylabel('Doğruluk')\n", "plt.legend(loc='best')\n", "plt.show()\n", "\n", "# Test verisi üzerinde tahmin yapma\n", "y_pred = model.predict(X_test)\n", "y_pred_class = np.argmax(y_pred, axis=1) # Softmax çıktısından en yüksek sınıfı seçiyoruz\n", "\n", "# Accuracy\n", "accuracy = accuracy_score(y_test, y_pred_class)\n", "print(f'Accuracy: {accuracy:.4f}')\n", "\n", "# Confusion Matrix\n", "cm = confusion_matrix(y_test, y_pred_class)\n", "print('Confusion Matrix:')\n", "print(cm)\n", "\n", "# Classification Report (Precision, Recall, F1-score)\n", "class_report = classification_report(y_test, y_pred_class)\n", "print('Classification Report:')\n", "print(class_report)\n", "\n", "# ROC-AUC\n", "roc_auc = roc_auc_score(y_test, model.predict(X_test)[:, 1]) # Binary classification için\n", "print(f'ROC-AUC: {roc_auc:.4f}')\n", "\n", "# ROC Curve\n", "fpr, tpr, thresholds = roc_curve(y_test, model.predict(X_test)[:, 1])\n", "plt.figure()\n", "plt.plot(fpr, tpr, color='blue', label=f'ROC curve (area = {roc_auc:.2f})')\n", "plt.plot([0, 1], [0, 1], color='gray', linestyle='--')\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('Receiver Operating Characteristic (ROC) Curve')\n", "plt.legend(loc='lower right')\n", "plt.show()\n", "\n", "\n" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 2 }