{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running SVM with C=1000\n", "Average Accuracy (MDM=True) across all groups with C=1000: 89.36%\n", "Running SVM with C=10000\n", "Average Accuracy (MDM=True) across all groups with C=10000: 89.36%\n", "Running SVM with C=100000\n", "Average Accuracy (MDM=True) across all groups with C=100000: 89.36%\n", "Running SVM with C=1000000\n", "Average Accuracy (MDM=True) across all groups with C=1000000: 89.36%\n", "\n", "Final Results for each C value:\n", "C=1000, Average Accuracy: 89.36%\n", "C=10000, Average Accuracy: 89.36%\n", "C=100000, Average Accuracy: 89.36%\n", "C=1000000, Average Accuracy: 89.36%\n" ] } ], "source": [ "import pandas as pd\n", "from sklearn.feature_extraction.text import CountVectorizer\n", "from sklearn.svm import SVC\n", "import os\n", "import numpy as np\n", "from joblib import Parallel, delayed\n", "\n", "# Initialize variables to store overall accuracy results\n", "average_accuracies = {}\n", "\n", "# Function to process each group (parallelized later)\n", "def process_group(C_value, group_number):\n", " train_all_path = f'../../data_preprocess/dataset/{group_number}/train_all.csv'\n", " test_path = f'../../translation/0.result/{group_number}/test_p.csv'\n", "\n", " if not os.path.exists(test_path):\n", " print(f\"Test file for Group {group_number} does not exist. Skipping...\")\n", " return None\n", "\n", " # Load the train_all and test CSVs\n", " train_all_csv = pd.read_csv(train_all_path, low_memory=False)\n", " test_csv = pd.read_csv(test_path, low_memory=False)\n", "\n", " train_all_csv['tag_description'] = train_all_csv['tag_description'].fillna('')\n", " test_csv['tag_description'] = test_csv['tag_description'].fillna('')\n", "\n", " test_csv['c_thing'] = ''\n", " test_csv['c_property'] = ''\n", " test_csv['c_score'] = ''\n", " test_csv['c_duplicate'] = 0\n", "\n", " combined_tag_descriptions = train_all_csv['tag_description'].tolist()\n", "\n", " # BoW를 Boolean 방식으로 변환\n", " vectorizer = CountVectorizer(token_pattern=r'\\S+', binary=True)\n", " vectorizer.fit(combined_tag_descriptions)\n", "\n", " train_all_bow_matrix = vectorizer.transform(train_all_csv['tag_description']).toarray().astype(bool) # bool로 변환\n", " test_bow_matrix = vectorizer.transform(test_csv['tag_description']).toarray().astype(bool)\n", "\n", " # SVM 모델 학습 및 예측\n", " svm_model_thing = SVC(kernel='linear', probability=True, C=C_value)\n", " svm_model_property = SVC(kernel='linear', probability=True, C=C_value)\n", "\n", " # SVM을 이용하여 'thing' 및 'property' 예측 모델 학습\n", " svm_model_thing.fit(train_all_bow_matrix, train_all_csv['thing'])\n", " svm_model_property.fit(train_all_bow_matrix, train_all_csv['property'])\n", "\n", " # 'thing' 및 'property' 예측\n", " predicted_things = svm_model_thing.predict(test_bow_matrix)\n", " predicted_properties = svm_model_property.predict(test_bow_matrix)\n", " \n", " predicted_scores_thing = svm_model_thing.predict_proba(test_bow_matrix)[:, 1] # 'thing'의 예측 확률 점수\n", " predicted_scores_property = svm_model_property.predict_proba(test_bow_matrix)[:, 1] # 'property'의 예측 확률 점수\n", "\n", " predicted_scores = (predicted_scores_thing + predicted_scores_property) / 2 # 평균 점수로 결합\n", "\n", " test_csv['c_thing'] = predicted_things\n", " test_csv['c_property'] = predicted_properties\n", " test_csv['c_score'] = predicted_scores\n", "\n", " test_csv['cthing_correct'] = test_csv['thing'] == test_csv['c_thing']\n", " test_csv['cproperty_correct'] = test_csv['property'] == test_csv['c_property']\n", " test_csv['ctp_correct'] = test_csv['cthing_correct'] & test_csv['cproperty_correct']\n", "\n", " mdm_true_count = len(test_csv[test_csv['MDM'] == True])\n", " accuracy = (test_csv['ctp_correct'].sum() / mdm_true_count) * 100 if mdm_true_count > 0 else 0\n", " return accuracy\n", "\n", "# C 값들에 대해 실험할 값 설정 (log 스케일)\n", "C_values = [0.01, 0.1, 1, 10, 100]\n", "C_values = [1000, 10000, 100000, 1000000]\n", "# 각 C 값에 대해 실험\n", "for C_value in C_values:\n", " print(f\"Running SVM with C={C_value}\")\n", " average_accuracies[C_value] = []\n", "\n", " # Parallel processing for groups\n", " results = Parallel(n_jobs=-1)(delayed(process_group)(C_value, group_number) for group_number in range(1, 6))\n", "\n", " # Filter out None results (in case of missing files)\n", " accuracies = [result for result in results if result is not None]\n", "\n", " if accuracies:\n", " average_accuracy = sum(accuracies) / len(accuracies)\n", " average_accuracies[C_value].append(average_accuracy)\n", " print(f\"Average Accuracy (MDM=True) across all groups with C={C_value}: {average_accuracy:.2f}%\")\n", "\n", "# Print overall results for all C values\n", "print(\"\\nFinal Results for each C value:\")\n", "for C_value, accuracies in average_accuracies.items():\n", " avg_acc = np.mean(accuracies)\n", " print(f\"C={C_value}, Average Accuracy: {avg_acc:.2f}%\")\n" ] } ], "metadata": { "kernelspec": { "display_name": "torch", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 2 }