├── Code-Statistics.zip
├── Code.zip
├── DE
├── NLP
└── ai_news_project
│ ├── NLP.ipynb
│ └── readme.md
├── README.md
├── Skip_gram.ipynb
├── Verizon.ipynb
├── gpt_labeled_data.csv
├── ml_final_project.ipynb
├── patent_classification_transformer_wandb.ipynb
└── test.ipynb
/Code-Statistics.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easonwangzk/UChicago/660c0f58516554220d042b01bdd18296ce167d41/Code-Statistics.zip
--------------------------------------------------------------------------------
/Code.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/easonwangzk/UChicago/660c0f58516554220d042b01bdd18296ce167d41/Code.zip
--------------------------------------------------------------------------------
/DE:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/NLP/ai_news_project/readme.md:
--------------------------------------------------------------------------------
1 | # 🧭 项目执行建议:AI如何影响产业与就业的文本挖掘分析
2 |
3 | ---
4 |
5 | ## 一、🌐 项目总览与核心目标
6 |
7 | 本项目旨在通过对 **20万篇与AI、数据科学、机器学习相关的新闻文章**的分析:
8 |
9 | 1. 识别AI对不同行业/岗位的潜在影响
10 | 2. 提取成功/失败的AI应用案例
11 | 3. 分析AI技术趋势与情感演变
12 | 4. 给出面向企业/组织的自动化落地建议
13 |
14 | ---
15 |
16 | ## 二、📅 阶段化执行计划
17 |
18 | | 阶段 | 目标 | 工具与方法 | 输出物 |
19 | |------|------|------------|--------|
20 | | 1️⃣ 数据理解与清洗 | 理解数据结构、剔除噪音内容 | pandas, 正则, NLP预处理 | 数据概况表、清洗效果图 |
21 | | 2️⃣ 主题识别与行业映射 | 确定主要AI话题及其对应行业 | BERTopic + 零样本分类 | 行业关键词热图、主题分布图 |
22 | | 3️⃣ 情感与影响建模 | 判断AI应用效果(积极/消极) | 自监督标注 + RoBERTa + wandb调参 | 情感趋势图、行业影响矩阵 |
23 | | 4️⃣ 技术演进分析 | 分析前沿AI技术出现与传播 | 关键词趋势分析 + 时间热图 | 技术演化时间轴图 |
24 | | 5️⃣ 命名实体与组织识别 | 提取参与机构与投资动向 | NER + Gradio展示 | 投资机构图谱、成功公司列表 |
25 | | 6️⃣ 成果集成与展示 | 汇报可交互、可视化、可落地的结论 | PPT + Gradio dashboard | PowerPoint报告、Gradio工具页面 |
26 |
27 | ---
28 |
29 | ## 三、🔧 建模技巧详解(按模块细化)
30 |
31 | ### 1️⃣ 主题建模与行业映射
32 |
33 | - **方法组合**:
34 | - 使用 **BERTopic** 自动生成具备上下文信息的主题。
35 | - 结合 **Zero-shot Classification** 模型(如 `facebook/bart-large-mnli`)对新闻文本打上行业标签(如金融、医疗、教育等)。
36 |
37 | - **注意事项**:
38 | - 可使用“标题+前500词”拼接提高主题提取准确性。
39 | - 用 Top-N关键词覆盖率 显示主题对语料代表性。
40 |
41 | - **可视化**:
42 | - 热力图展示“主题 ↔ 行业”覆盖关系
43 | - word cloud展示每个主题Top词汇
44 |
45 | ---
46 |
47 | ### 2️⃣ 情感分析与AI成效评估
48 |
49 | - **标签构建**:
50 | - 选取300~500篇样本文本,使用GPT或人工辅助标注“正向/负向/中性”
51 | - 标签策略:正向=成功部署AI,负向=引发失业/争议,中性=纯技术新闻
52 |
53 | - **模型建议**:
54 | - 微调一个轻量级的 `RoBERTa-base` 模型,配合wandb记录训练过程。
55 | - 加入类别权重平衡处理,防止中性标签主导模型判断。
56 |
57 | - **优化技巧**:
58 | - 使用 Text Augmentation(如EDA、Back Translation)增强样本多样性。
59 | - 用 wandb 进行超参数调优与模型版本对比。
60 |
61 | - **输出结果**:
62 | - 行业情感分布图(positive/neutral/negative)
63 | - 情感变化趋势线图(按季度或年份)
64 | - 成功/失败新闻摘要列表及情绪原因提取
65 |
66 | ---
67 |
68 | ### 3️⃣ 技术演进与应用趋势追踪
69 |
70 | - **关键词建议**:
71 | - “ChatGPT”, “LLM”, “Stable Diffusion”, “AutoML”, “Midjourney”, “Generative AI”, “Conversational AI”, “LangChain” 等
72 |
73 | - **方法流程**:
74 | - 构建关键词时间序列,统计每月出现频次
75 | - 分析其与正向/负向情感比例的关系
76 |
77 | - **可视化**:
78 | - 技术热度趋势时间线图
79 | - 技术 ↔ 行业 的交叉关联图谱
80 |
81 | ---
82 |
83 | ### 4️⃣ 命名实体识别与组织行为分析
84 |
85 | - **目标**:识别文本中的组织(公司/高校/政府)、人物、地理位置等
86 |
87 | - **技术路径**:
88 | - 使用 `SpaCy` 或 `transformers` 的 NER 模块提取实体
89 | - 按公司聚合分析,识别正面曝光最多的机构
90 |
91 | - **分析建议**:
92 | - 建立“机构 → 技术 → 行业”的三元组关系表
93 | - 提取“AI转型成功”公司的应用案例摘要
94 |
95 | - **Gradio可视化**:
96 | - 构建交互式公司-技术-情感图谱
97 | - 提供关键词输入 → 返回行业情感与技术影响的界面
98 |
99 | ---
100 |
101 | ## 四、📈 wandb 与 Gradio 的展示应用建议
102 |
103 | ### 🟣 wandb(可视化调参、实验追踪)
104 |
105 | - 用于:
106 | - 记录情感分析模型的训练损失、精度、F1指标
107 | - 多模型对比实验展示(不同模型/不同超参组合)
108 | - 嵌入式PPT图表生成(如confusion matrix、ROC曲线等)
109 |
110 | - 展示示例:
111 | - `wandb.init(project="ai_news_impact")`
112 | - 每轮epoch记录 loss、accuracy、learning rate
113 |
114 | ---
115 |
116 | ### 🟢 Gradio(可交互式NLP分析平台)
117 |
118 | - 用于构建交互式App展示:
119 | - 用户输入一段新闻摘要,返回:
120 | - 行业识别(Top 3)
121 | - 主题归属
122 | - 情感评分及解释
123 | - 是否包含新兴技术关键词
124 |
125 | - 模块建议:
126 | - “新闻行业预测器”:输入文本 → 返回行业标签 + 置信度
127 | - “AI情绪雷达”:展示行业情绪分布图
128 | - “技术趋势查询器”:输入关键词 → 返回相关行业/文章标题摘要
129 |
130 | ---
131 |
132 | ## 五、📢 商业结论与建议输出方向
133 |
134 | | 类型 | 建议示例 |
135 | |------|----------|
136 | | 行业洞察 | 法律、教育、客服、办公自动化受AI影响最深,建议部署辅助系统 |
137 | | 成功经验 | 谷歌、微软、OpenAI等机构推动AI落地,值得借鉴技术栈与组织模式 |
138 | | 失败警示 | 建筑、物流等行业由于操作难度高,AI适应性差,需警惕误用风险 |
139 | | 投资建议 | 政府可引导AI资源投入高替代性行业,减少结构性失业 |
140 | | 企业策略 | 实施AI前应加强数据治理、业务协同、员工培训与流程再造 |
141 |
142 | ---
143 |
144 | ## 六、📘 总结:成功交付的关键标准
145 |
146 | | 要素 | 是否具备 |
147 | |------|----------|
148 | | 数据处理合理 | ✅ 清洗+探索分析到位 |
149 | | NLP技术应用得当 | ✅ 涵盖主题建模、NER、情感建模 |
150 | | 可视化展示充分 | ✅ wandb实验记录 + Gradio交互工具 |
151 | | 商业价值明确 | ✅ 可落地建议 + 案例支持 |
152 | | 表达清晰规范 | ✅ PPT图文并茂 + 技术与业务兼顾 |
153 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # UChicago
2 | Chicago Project
3 |
--------------------------------------------------------------------------------
/Skip_gram.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "machine_shape": "hm",
8 | "gpuType": "T4",
9 | "authorship_tag": "ABX9TyMNQ04t0z15woNIXBmdOC4W",
10 | "include_colab_link": true
11 | },
12 | "kernelspec": {
13 | "name": "python3",
14 | "display_name": "Python 3"
15 | },
16 | "language_info": {
17 | "name": "python"
18 | },
19 | "accelerator": "GPU"
20 | },
21 | "cells": [
22 | {
23 | "cell_type": "markdown",
24 | "metadata": {
25 | "id": "view-in-github",
26 | "colab_type": "text"
27 | },
28 | "source": [
29 | "
"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "source": [
35 | "import os\n",
36 | "import re\n",
37 | "import json\n",
38 | "import torch\n",
39 | "import random\n",
40 | "import requests\n",
41 | "import numpy as np\n",
42 | "from torch import nn, optim\n",
43 | "from torch.utils.data import Dataset, DataLoader\n",
44 | "from collections import Counter, OrderedDict\n",
45 | "from itertools import chain\n",
46 | "from typing import List"
47 | ],
48 | "metadata": {
49 | "id": "0gTrfO1Grc0n"
50 | },
51 | "execution_count": 1,
52 | "outputs": []
53 | },
54 | {
55 | "cell_type": "markdown",
56 | "source": [
57 | "## Device setup"
58 | ],
59 | "metadata": {
60 | "id": "Khj_Sy7Mr5Xw"
61 | }
62 | },
63 | {
64 | "cell_type": "code",
65 | "source": [
66 | "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
67 | "print(f\"Using {device} as device.\")"
68 | ],
69 | "metadata": {
70 | "colab": {
71 | "base_uri": "https://localhost:8080/"
72 | },
73 | "id": "2Q7kTaujr8nL",
74 | "outputId": "5481db4e-92e9-4b5b-c43d-4df819678660"
75 | },
76 | "execution_count": 2,
77 | "outputs": [
78 | {
79 | "output_type": "stream",
80 | "name": "stdout",
81 | "text": [
82 | "Using cuda as device.\n"
83 | ]
84 | }
85 | ]
86 | },
87 | {
88 | "cell_type": "markdown",
89 | "source": [
90 | "## Configs"
91 | ],
92 | "metadata": {
93 | "id": "WPyPU2egr_m_"
94 | }
95 | },
96 | {
97 | "cell_type": "code",
98 | "source": [
99 | "data_dir = \"./data\"\n",
100 | "model_dir = \"./models\"\n",
101 | "debug = True\n",
102 | "\n",
103 | "if debug:\n",
104 | " CONTEXT_WINDOW = 2\n",
105 | " EMBEDDING_SIZE = 5\n",
106 | " MIN_FREQ = 5\n",
107 | " BATCH_SIZE = 3\n",
108 | " N_EPOCHS = 1\n",
109 | "else:\n",
110 | " CONTEXT_WINDOW = 4\n",
111 | " EMBEDDING_SIZE = 100\n",
112 | " MIN_FREQ = 25\n",
113 | " BATCH_SIZE = 64\n",
114 | " N_EPOCHS = 3"
115 | ],
116 | "metadata": {
117 | "id": "TkfrEtnysDEe"
118 | },
119 | "execution_count": 3,
120 | "outputs": []
121 | },
122 | {
123 | "cell_type": "markdown",
124 | "source": [
125 | "## Create dirs"
126 | ],
127 | "metadata": {
128 | "id": "J5GwXnhWsSIP"
129 | }
130 | },
131 | {
132 | "cell_type": "code",
133 | "source": [
134 | "os.makedirs(data_dir, exist_ok=True)\n",
135 | "os.makedirs(model_dir, exist_ok=True)"
136 | ],
137 | "metadata": {
138 | "id": "PGFbWq1ssVlu"
139 | },
140 | "execution_count": 4,
141 | "outputs": []
142 | },
143 | {
144 | "cell_type": "markdown",
145 | "source": [
146 | "## Download and tokenize text"
147 | ],
148 | "metadata": {
149 | "id": "UFa7y2nhsYD_"
150 | }
151 | },
152 | {
153 | "cell_type": "code",
154 | "source": [
155 | "url = \"https://www.gutenberg.org/cache/epub/7370/pg7370.txt\"\n",
156 | "response = requests.get(url)\n",
157 | "raw_text = response.text.lower()\n",
158 | "raw_text = re.sub(r'[^a-z\\s]', '', raw_text)\n",
159 | "sentences = [line.split() for line in raw_text.split('\\n') if line.strip()]\n",
160 | "print(f\"Number of sentences: {len(sentences):,}\")"
161 | ],
162 | "metadata": {
163 | "colab": {
164 | "base_uri": "https://localhost:8080/"
165 | },
166 | "id": "DussqJ0MsagF",
167 | "outputId": "3d9ec680-dcd4-47da-d2cc-a0353c615d1d"
168 | },
169 | "execution_count": 5,
170 | "outputs": [
171 | {
172 | "output_type": "stream",
173 | "name": "stdout",
174 | "text": [
175 | "Number of sentences: 4,957\n"
176 | ]
177 | }
178 | ]
179 | },
180 | {
181 | "cell_type": "markdown",
182 | "source": [
183 | "\n",
184 | "## Vocabulary class (same as CBOW version)"
185 | ],
186 | "metadata": {
187 | "id": "G6e44DWrsc9W"
188 | }
189 | },
190 | {
191 | "cell_type": "code",
192 | "source": [
193 | "class Vocab:\n",
194 | " def __init__(self, word_counts: OrderedDict, min_freq: int = 1, max_size: int = None, specials: List[str] = None, unk_token: str = \"\"):\n",
195 | " self.word_counts = word_counts\n",
196 | " self.min_freq = min_freq\n",
197 | " self.max_size = max_size\n",
198 | " self.unk_token = unk_token\n",
199 | " self.specials = list(specials) if specials else []\n",
200 | "\n",
201 | " if self.unk_token not in self.specials:\n",
202 | " self.specials.insert(0, self.unk_token)\n",
203 | "\n",
204 | " self.token2idx = {}\n",
205 | " self.idx2token = []\n",
206 | " self._prepare_vocab()\n",
207 | "\n",
208 | " def __len__(self):\n",
209 | " return len(self.idx2token)\n",
210 | "\n",
211 | " def __contains__(self, value):\n",
212 | " return value in self.idx2token\n",
213 | "\n",
214 | " def _prepare_vocab(self):\n",
215 | " vocab_list = self.specials.copy()\n",
216 | " filtered_words = [word for word, freq in self.word_counts.items() if freq >= self.min_freq and word not in self.specials]\n",
217 | " if self.max_size is not None:\n",
218 | " filtered_words = filtered_words[:self.max_size - len(self.specials)]\n",
219 | " vocab_list.extend(filtered_words)\n",
220 | " self.idx2token = vocab_list\n",
221 | " self.token2idx = {word: idx for idx, word in enumerate(vocab_list)}\n",
222 | "\n",
223 | " def get_token(self, idx: int) -> str:\n",
224 | " return self.idx2token[idx] if 0 <= idx < len(self.idx2token) else self.unk_token\n",
225 | "\n",
226 | " def get_index(self, token: str) -> int:\n",
227 | " return self.token2idx.get(token, self.token2idx[self.unk_token])\n",
228 | "\n",
229 | " def get_tokens(self, indices: List[int]) -> List[str]:\n",
230 | " return [self.get_token(idx) for idx in indices]\n",
231 | "\n",
232 | " def get_indices(self, tokens: List[str]) -> List[int]:\n",
233 | " return [self.get_index(token) for token in tokens]"
234 | ],
235 | "metadata": {
236 | "id": "x9gV2NoasfnN"
237 | },
238 | "execution_count": 6,
239 | "outputs": []
240 | },
241 | {
242 | "cell_type": "markdown",
243 | "source": [
244 | "## Padding for skip-gram"
245 | ],
246 | "metadata": {
247 | "id": "PES9ALTWsmXd"
248 | }
249 | },
250 | {
251 | "cell_type": "code",
252 | "source": [
253 | "def pad_sentences(sentences: List[List[str]], context_length: int, pad_token: str = \"\") -> List[List[str]]:\n",
254 | " padded_sentences = []\n",
255 | " for sentence in sentences:\n",
256 | " padded_sentence = [pad_token] * context_length + sentence + [pad_token] * context_length\n",
257 | " padded_sentences.append(padded_sentence)\n",
258 | " return padded_sentences"
259 | ],
260 | "metadata": {
261 | "id": "z6Cuo7aispl7"
262 | },
263 | "execution_count": 7,
264 | "outputs": []
265 | },
266 | {
267 | "cell_type": "code",
268 | "source": [
269 | "sentences = pad_sentences(sentences, CONTEXT_WINDOW)"
270 | ],
271 | "metadata": {
272 | "id": "6bunxvYPs0w5"
273 | },
274 | "execution_count": 8,
275 | "outputs": []
276 | },
277 | {
278 | "cell_type": "markdown",
279 | "source": [
280 | "## Build vocab"
281 | ],
282 | "metadata": {
283 | "id": "OqfQctNksswi"
284 | }
285 | },
286 | {
287 | "cell_type": "code",
288 | "source": [
289 | "vocab = Vocab(OrderedDict(Counter(chain.from_iterable(sentences))), min_freq=MIN_FREQ, specials=[\"\"])\n",
290 | "print(f\"Size of Vocabulary: {len(vocab):,}\")"
291 | ],
292 | "metadata": {
293 | "colab": {
294 | "base_uri": "https://localhost:8080/"
295 | },
296 | "id": "1nPBlky7s4D1",
297 | "outputId": "cedabe98-c965-4814-e8a2-77ac4a2ce821"
298 | },
299 | "execution_count": 9,
300 | "outputs": [
301 | {
302 | "output_type": "stream",
303 | "name": "stdout",
304 | "text": [
305 | "Size of Vocabulary: 1,158\n"
306 | ]
307 | }
308 | ]
309 | },
310 | {
311 | "cell_type": "markdown",
312 | "source": [
313 | "\n",
314 | "## Skip-gram pair generation"
315 | ],
316 | "metadata": {
317 | "id": "xAXtdfags6ok"
318 | }
319 | },
320 | {
321 | "cell_type": "code",
322 | "source": [
323 | "def generate_skipgram_pairs(sentences: List[List[str]], context_length: int, vocab: Vocab):\n",
324 | " inputs = []\n",
325 | " outputs = []\n",
326 | " for sentence in sentences:\n",
327 | " encoded = vocab.get_indices(sentence)\n",
328 | " for center_idx in range(context_length, len(encoded) - context_length):\n",
329 | " center_word = encoded[center_idx]\n",
330 | " context = encoded[center_idx - context_length : center_idx] + encoded[center_idx + 1 : center_idx + context_length + 1]\n",
331 | " for context_word in context:\n",
332 | " inputs.append(center_word)\n",
333 | " outputs.append(context_word)\n",
334 | " return torch.tensor(inputs), torch.tensor(outputs)\n",
335 | "\n",
336 | "inputs, outputs = generate_skipgram_pairs(sentences, CONTEXT_WINDOW, vocab)\n",
337 | "print(f\"Number of training examples: {len(inputs):,}\")"
338 | ],
339 | "metadata": {
340 | "colab": {
341 | "base_uri": "https://localhost:8080/"
342 | },
343 | "id": "x51_SV14s9yY",
344 | "outputId": "72e5b9db-71a2-4192-858b-dd553829b95d"
345 | },
346 | "execution_count": 10,
347 | "outputs": [
348 | {
349 | "output_type": "stream",
350 | "name": "stdout",
351 | "text": [
352 | "Number of training examples: 236,704\n"
353 | ]
354 | }
355 | ]
356 | },
357 | {
358 | "cell_type": "markdown",
359 | "source": [
360 | "## Dataset class"
361 | ],
362 | "metadata": {
363 | "id": "lqnhGseutA1j"
364 | }
365 | },
366 | {
367 | "cell_type": "code",
368 | "source": [
369 | "class SkipGramDataset(Dataset):\n",
370 | " def __init__(self, inputs, targets):\n",
371 | " self.inputs = inputs\n",
372 | " self.targets = targets\n",
373 | "\n",
374 | " def __len__(self):\n",
375 | " return len(self.inputs)\n",
376 | "\n",
377 | " def __getitem__(self, idx):\n",
378 | " return self.inputs[idx], self.targets[idx]"
379 | ],
380 | "metadata": {
381 | "id": "0HG8k7KmtDG-"
382 | },
383 | "execution_count": 11,
384 | "outputs": []
385 | },
386 | {
387 | "cell_type": "markdown",
388 | "source": [
389 | "## Skip-gram model"
390 | ],
391 | "metadata": {
392 | "id": "UmZDRhZStFc1"
393 | }
394 | },
395 | {
396 | "cell_type": "code",
397 | "source": [
398 | "class SkipGram(nn.Module):\n",
399 | " def __init__(self, vocab_size, embedding_dim):\n",
400 | " super().__init__()\n",
401 | " self.embeddings = nn.Embedding(vocab_size, embedding_dim)\n",
402 | " self.linear = nn.Linear(embedding_dim, vocab_size)\n",
403 | "\n",
404 | " def forward(self, center_words):\n",
405 | " embeds = self.embeddings(center_words)\n",
406 | " out = self.linear(embeds)\n",
407 | " return out\n",
408 | "\n",
409 | " def debug_forward(self, center_words):\n",
410 | " embeds = self.embeddings(center_words)\n",
411 | " print(\"\\nembeddings shape:\", embeds.shape)\n",
412 | " print(embeds)\n",
413 | " out = self.linear(embeds)\n",
414 | " print(\"\\nlogits shape:\", out.shape)\n",
415 | " print(out)\n",
416 | " return out"
417 | ],
418 | "metadata": {
419 | "id": "hGxDDaIUtFL2"
420 | },
421 | "execution_count": 12,
422 | "outputs": []
423 | },
424 | {
425 | "cell_type": "markdown",
426 | "source": [
427 | "## Instantiate model"
428 | ],
429 | "metadata": {
430 | "id": "XmXRsNBStNnC"
431 | }
432 | },
433 | {
434 | "cell_type": "code",
435 | "source": [
436 | "model = SkipGram(vocab_size=len(vocab), embedding_dim=EMBEDDING_SIZE).to(device)\n",
437 | "print(model)"
438 | ],
439 | "metadata": {
440 | "colab": {
441 | "base_uri": "https://localhost:8080/"
442 | },
443 | "id": "U2-3V0setNZK",
444 | "outputId": "61630f59-9743-47d6-bb91-668785ae2256"
445 | },
446 | "execution_count": 13,
447 | "outputs": [
448 | {
449 | "output_type": "stream",
450 | "name": "stdout",
451 | "text": [
452 | "SkipGram(\n",
453 | " (embeddings): Embedding(1158, 5)\n",
454 | " (linear): Linear(in_features=5, out_features=1158, bias=True)\n",
455 | ")\n"
456 | ]
457 | }
458 | ]
459 | },
460 | {
461 | "cell_type": "markdown",
462 | "source": [
463 | "## Loss and optimizer"
464 | ],
465 | "metadata": {
466 | "id": "9CofeFdWtTGL"
467 | }
468 | },
469 | {
470 | "cell_type": "code",
471 | "source": [
472 | "criterion = nn.CrossEntropyLoss(ignore_index=vocab.get_index(vocab.unk_token))\n",
473 | "optimizer = optim.Adam(model.parameters(), lr=0.001)"
474 | ],
475 | "metadata": {
476 | "id": "RE_giWxqtV_S"
477 | },
478 | "execution_count": 14,
479 | "outputs": []
480 | },
481 | {
482 | "cell_type": "markdown",
483 | "source": [
484 | "## Dataloader"
485 | ],
486 | "metadata": {
487 | "id": "Wa0WOIABtZnk"
488 | }
489 | },
490 | {
491 | "cell_type": "code",
492 | "source": [
493 | "dataset = SkipGramDataset(inputs, outputs)\n",
494 | "dataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)"
495 | ],
496 | "metadata": {
497 | "id": "356_6QCTtb1U"
498 | },
499 | "execution_count": 15,
500 | "outputs": []
501 | },
502 | {
503 | "cell_type": "markdown",
504 | "source": [
505 | "## Training loop"
506 | ],
507 | "metadata": {
508 | "id": "3xJ6qhMUteOJ"
509 | }
510 | },
511 | {
512 | "cell_type": "code",
513 | "source": [
514 | "for epoch in range(N_EPOCHS):\n",
515 | " total_loss = 0\n",
516 | " for batch_inputs, batch_outputs in dataloader:\n",
517 | " batch_inputs, batch_outputs = batch_inputs.to(device), batch_outputs.to(device)\n",
518 | "\n",
519 | " optimizer.zero_grad()\n",
520 | " if debug:\n",
521 | " predictions = model.debug_forward(batch_inputs)\n",
522 | " else:\n",
523 | " predictions = model.forward(batch_inputs)\n",
524 | "\n",
525 | " loss = criterion(predictions, batch_outputs)\n",
526 | " loss.backward()\n",
527 | " optimizer.step()\n",
528 | " total_loss += loss.item()\n",
529 | "\n",
530 | " if debug: break\n",
531 | " if debug: break\n",
532 | " print(f\"Epoch {epoch+1}/{N_EPOCHS}, Loss: {total_loss/len(dataset):.4f}\")"
533 | ],
534 | "metadata": {
535 | "colab": {
536 | "base_uri": "https://localhost:8080/"
537 | },
538 | "id": "Dh1QxsmotgQK",
539 | "outputId": "e6ed8cb9-adc9-4ea0-a0d8-2960f7401f48"
540 | },
541 | "execution_count": 16,
542 | "outputs": [
543 | {
544 | "output_type": "stream",
545 | "name": "stdout",
546 | "text": [
547 | "\n",
548 | "embeddings shape: torch.Size([3, 5])\n",
549 | "tensor([[ 0.0099, 0.8007, -0.2172, -1.7865, -0.1345],\n",
550 | " [-0.1325, -1.2426, -0.1149, 1.1431, 0.3546],\n",
551 | " [-2.8135, 0.0679, 0.0196, -0.9808, 0.5849]], device='cuda:0',\n",
552 | " grad_fn=)\n",
553 | "\n",
554 | "logits shape: torch.Size([3, 1158])\n",
555 | "tensor([[ 0.6994, 0.6161, 0.1455, ..., 0.0060, 0.0517, 0.4258],\n",
556 | " [-0.0163, 0.1403, -0.6382, ..., -0.2566, -0.6915, -0.8407],\n",
557 | " [-0.2563, -0.1448, -0.0099, ..., -0.1927, 0.5144, 0.6950]],\n",
558 | " device='cuda:0', grad_fn=)\n"
559 | ]
560 | }
561 | ]
562 | },
563 | {
564 | "cell_type": "markdown",
565 | "source": [
566 | "## Save trained model weights and vocab"
567 | ],
568 | "metadata": {
569 | "id": "o-0K3JTiu3_V"
570 | }
571 | },
572 | {
573 | "cell_type": "code",
574 | "source": [
575 | "import torch.nn.functional as F\n",
576 | "import pickle"
577 | ],
578 | "metadata": {
579 | "id": "fKQPx6ODu_Ar"
580 | },
581 | "execution_count": 18,
582 | "outputs": []
583 | },
584 | {
585 | "cell_type": "code",
586 | "source": [
587 | "torch.save(model.embeddings.weight.data, f\"{model_dir}/weights.pt\")\n",
588 | "with open(f\"{model_dir}/vocab.pkl\", \"wb\") as f:\n",
589 | " pickle.dump(vocab, f)"
590 | ],
591 | "metadata": {
592 | "id": "Bo4Pzav2u8hj"
593 | },
594 | "execution_count": 19,
595 | "outputs": []
596 | },
597 | {
598 | "cell_type": "markdown",
599 | "source": [
600 | "\n",
601 | "## Define function to compute closest words"
602 | ],
603 | "metadata": {
604 | "id": "2BNSog-9vBrx"
605 | }
606 | },
607 | {
608 | "cell_type": "code",
609 | "source": [
610 | "def closest_words(embeddings, vocab, word, n=10):\n",
611 | " if word not in vocab.token2idx:\n",
612 | " raise ValueError(f\"'{word}' not in vocabulary\")\n",
613 | "\n",
614 | " word_idx = vocab.get_index(word)\n",
615 | " word_embedding = embeddings[word_idx]\n",
616 | "\n",
617 | " similarities = F.cosine_similarity(word_embedding.unsqueeze(0), embeddings, dim=1)\n",
618 | " similarities[word_idx] = -1 # exclude itself\n",
619 | "\n",
620 | " top_indices = similarities.topk(n).indices\n",
621 | " return [(vocab.get_token(idx), similarities[idx].item()) for idx in top_indices]"
622 | ],
623 | "metadata": {
624 | "id": "Fjt94vcavFkG"
625 | },
626 | "execution_count": 20,
627 | "outputs": []
628 | },
629 | {
630 | "cell_type": "code",
631 | "source": [
632 | "if torch.cuda.is_available():\n",
633 | " loaded_embeddings = torch.load(f\"{model_dir}/weights.pt\", weights_only=True)\n",
634 | "else:\n",
635 | " loaded_embeddings = torch.load(f\"{model_dir}/weights.pt\", weights_only=True, map_location=torch.device(\"cpu\"))\n",
636 | "\n",
637 | "with open(f\"{model_dir}/vocab.pkl\", \"rb\") as f:\n",
638 | " loaded_vocab = pickle.load(f)"
639 | ],
640 | "metadata": {
641 | "id": "l3K0NsZKvOeQ"
642 | },
643 | "execution_count": 21,
644 | "outputs": []
645 | },
646 | {
647 | "cell_type": "markdown",
648 | "source": [
649 | "## Run similarity search"
650 | ],
651 | "metadata": {
652 | "id": "FtVJ112bvTtm"
653 | }
654 | },
655 | {
656 | "cell_type": "code",
657 | "source": [
658 | "print(\"Trained model:\")\n",
659 | "print(closest_words(embeddings=loaded_embeddings, vocab=loaded_vocab, word=\"love\", n=10))"
660 | ],
661 | "metadata": {
662 | "colab": {
663 | "base_uri": "https://localhost:8080/"
664 | },
665 | "id": "dMRGNCodvX9h",
666 | "outputId": "cf846faa-9b2f-473e-fc9d-4fd1850d8b8a"
667 | },
668 | "execution_count": 22,
669 | "outputs": [
670 | {
671 | "output_type": "stream",
672 | "name": "stdout",
673 | "text": [
674 | "Trained model:\n",
675 | "[('was', 0.9637019038200378), ('make', 0.905871570110321), ('judge', 0.9049926996231079), ('body', 0.9028736352920532), ('brought', 0.8975038528442383), ('minority', 0.8772290945053101), ('wise', 0.8752244710922241), ('kingdom', 0.8742192387580872), ('grown', 0.8639228940010071), ('food', 0.8584514856338501)]\n"
676 | ]
677 | }
678 | ]
679 | },
680 | {
681 | "cell_type": "markdown",
682 | "source": [
683 | "\n",
684 | "## Compare with untrained model"
685 | ],
686 | "metadata": {
687 | "id": "9g12zcLpviU4"
688 | }
689 | },
690 | {
691 | "cell_type": "code",
692 | "source": [
693 | "model_untrained = SkipGram(vocab_size=len(vocab), embedding_dim=EMBEDDING_SIZE)\n",
694 | "untrained_embeddings = model_untrained.embeddings.weight.data\n",
695 | "\n",
696 | "print(\"\\nUntrained model:\")\n",
697 | "print(closest_words(embeddings=untrained_embeddings, vocab=vocab, word=\"love\", n=10))"
698 | ],
699 | "metadata": {
700 | "colab": {
701 | "base_uri": "https://localhost:8080/"
702 | },
703 | "id": "zQR_iEdevgGX",
704 | "outputId": "d9d3ef2b-d17b-4533-8b9e-817c4fd29ca9"
705 | },
706 | "execution_count": 23,
707 | "outputs": [
708 | {
709 | "output_type": "stream",
710 | "name": "stdout",
711 | "text": [
712 | "\n",
713 | "Untrained model:\n",
714 | "[('or', 0.9682488441467285), ('draw', 0.9493830800056458), ('agreed', 0.9472517371177673), ('paragraph', 0.9458328485488892), ('many', 0.9302278161048889), ('grants', 0.928244411945343), ('measure', 0.9108309149742126), ('understood', 0.9096970558166504), ('freemen', 0.9056882262229919), ('power', 0.89534991979599)]\n"
715 | ]
716 | }
717 | ]
718 | }
719 | ]
720 | }
--------------------------------------------------------------------------------
/Verizon.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "**Data Dictionary**"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "- enrolldt : Enrollment Date
\n",
15 | "- price: Membership price
\n",
16 | "- downpmt: Downpayment
\n",
17 | "- monthdue: Months Due
\n",
18 | "- pmttype: Payment Type (1: Credit Card, 3: Cash , 4: Check, 5: Debit Card)
\n",
19 | "- use: Usage
\n",
20 | "- age: Age of customer
\n",
21 | "- gender: Gender of customer(1: Male, 2: Female)
\n",
22 | "- default: 1: Default, 0 Non-Default
"
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": null,
28 | "metadata": {},
29 | "outputs": [],
30 | "source": []
31 | },
32 | {
33 | "cell_type": "markdown",
34 | "metadata": {},
35 | "source": [
36 | " We have used Logistic Regression, Decision Tree and Random Forest to predict if a customer will default or not. Try 2 other models of your choice and evaluate them on 2 metrics of your choice that we haven't used so far"
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "execution_count": 1,
42 | "metadata": {
43 | "tags": []
44 | },
45 | "outputs": [
46 | {
47 | "name": "stdout",
48 | "output_type": "stream",
49 | "text": [
50 | "Epoch 1/100\n"
51 | ]
52 | },
53 | {
54 | "name": "stderr",
55 | "output_type": "stream",
56 | "text": [
57 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/keras/src/layers/core/input_layer.py:25: UserWarning: Argument `input_shape` is deprecated. Use `shape` instead.\n",
58 | " warnings.warn(\n"
59 | ]
60 | },
61 | {
62 | "name": "stdout",
63 | "output_type": "stream",
64 | "text": [
65 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 728us/step - accuracy: 0.5867 - loss: 1.4448 - val_accuracy: 0.8344 - val_loss: -0.2755\n",
66 | "Epoch 2/100\n",
67 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 388us/step - accuracy: 0.7738 - loss: -0.4064 - val_accuracy: 0.8469 - val_loss: -0.9330\n",
68 | "Epoch 3/100\n",
69 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8351 - loss: -0.8675 - val_accuracy: 0.8532 - val_loss: -1.0668\n",
70 | "Epoch 4/100\n",
71 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 0.8562 - loss: -1.2058 - val_accuracy: 0.8628 - val_loss: -1.1302\n",
72 | "Epoch 5/100\n",
73 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8619 - loss: -1.2597 - val_accuracy: 0.8687 - val_loss: -1.1850\n",
74 | "Epoch 6/100\n",
75 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8689 - loss: -1.4898 - val_accuracy: 0.8631 - val_loss: -1.1925\n",
76 | "Epoch 7/100\n",
77 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8687 - loss: -1.5509 - val_accuracy: 0.8620 - val_loss: -1.2102\n",
78 | "Epoch 8/100\n",
79 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8715 - loss: -1.5750 - val_accuracy: 0.8694 - val_loss: -1.2491\n",
80 | "Epoch 9/100\n",
81 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8730 - loss: -1.5086 - val_accuracy: 0.8635 - val_loss: -1.2463\n",
82 | "Epoch 10/100\n",
83 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8723 - loss: -1.5804 - val_accuracy: 0.8709 - val_loss: -1.2653\n",
84 | "Epoch 11/100\n",
85 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 384us/step - accuracy: 0.8754 - loss: -1.5467 - val_accuracy: 0.8723 - val_loss: -1.2777\n",
86 | "Epoch 12/100\n",
87 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 385us/step - accuracy: 0.8775 - loss: -1.4726 - val_accuracy: 0.8657 - val_loss: -1.2636\n",
88 | "Epoch 13/100\n",
89 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 388us/step - accuracy: 0.8765 - loss: -1.6152 - val_accuracy: 0.8683 - val_loss: -1.2993\n",
90 | "Epoch 14/100\n",
91 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 391us/step - accuracy: 0.8748 - loss: -1.6811 - val_accuracy: 0.8687 - val_loss: -1.2901\n",
92 | "Epoch 15/100\n",
93 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 392us/step - accuracy: 0.8763 - loss: -1.5232 - val_accuracy: 0.8734 - val_loss: -1.2932\n",
94 | "Epoch 16/100\n",
95 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8785 - loss: -1.5563 - val_accuracy: 0.8701 - val_loss: -1.3364\n",
96 | "Epoch 17/100\n",
97 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8797 - loss: -1.6318 - val_accuracy: 0.8742 - val_loss: -1.3272\n",
98 | "Epoch 18/100\n",
99 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 373us/step - accuracy: 0.8778 - loss: -1.6541 - val_accuracy: 0.8723 - val_loss: -1.3383\n",
100 | "Epoch 19/100\n",
101 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8765 - loss: -1.5488 - val_accuracy: 0.8701 - val_loss: -1.3394\n",
102 | "Epoch 20/100\n",
103 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 389us/step - accuracy: 0.8795 - loss: -1.6604 - val_accuracy: 0.8738 - val_loss: -1.3623\n",
104 | "Epoch 21/100\n",
105 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 0.8810 - loss: -1.7610 - val_accuracy: 0.8771 - val_loss: -1.3651\n",
106 | "Epoch 22/100\n",
107 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8819 - loss: -1.6975 - val_accuracy: 0.8727 - val_loss: -1.3354\n",
108 | "Epoch 23/100\n",
109 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8789 - loss: -1.6139 - val_accuracy: 0.8734 - val_loss: -1.3569\n",
110 | "Epoch 24/100\n",
111 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8805 - loss: -1.5595 - val_accuracy: 0.8709 - val_loss: -1.3493\n",
112 | "Epoch 25/100\n",
113 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8761 - loss: -1.5293 - val_accuracy: 0.8767 - val_loss: -1.3613\n",
114 | "Epoch 26/100\n",
115 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 377us/step - accuracy: 0.8796 - loss: -1.7249 - val_accuracy: 0.8745 - val_loss: -1.3669\n",
116 | "Epoch 27/100\n",
117 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8760 - loss: -1.6421 - val_accuracy: 0.8749 - val_loss: -1.3583\n",
118 | "Epoch 28/100\n",
119 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 386us/step - accuracy: 0.8810 - loss: -1.5780 - val_accuracy: 0.8720 - val_loss: -1.3689\n",
120 | "Epoch 29/100\n",
121 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8800 - loss: -1.5343 - val_accuracy: 0.8698 - val_loss: -1.3474\n",
122 | "Epoch 30/100\n",
123 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8705 - loss: -1.5743 - val_accuracy: 0.8716 - val_loss: -1.3756\n",
124 | "Epoch 31/100\n",
125 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8817 - loss: -1.7087 - val_accuracy: 0.8672 - val_loss: -1.3541\n",
126 | "Epoch 32/100\n",
127 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8721 - loss: -1.6025 - val_accuracy: 0.8745 - val_loss: -1.3754\n",
128 | "Epoch 33/100\n",
129 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8782 - loss: -1.7282 - val_accuracy: 0.8727 - val_loss: -1.3590\n",
130 | "Epoch 34/100\n",
131 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8804 - loss: -1.7086 - val_accuracy: 0.8698 - val_loss: -1.3470\n",
132 | "Epoch 35/100\n",
133 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8810 - loss: -1.5826 - val_accuracy: 0.8764 - val_loss: -1.4009\n",
134 | "Epoch 36/100\n",
135 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8822 - loss: -1.6581 - val_accuracy: 0.8756 - val_loss: -1.3912\n",
136 | "Epoch 37/100\n",
137 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8791 - loss: -1.6491 - val_accuracy: 0.8764 - val_loss: -1.3963\n",
138 | "Epoch 38/100\n",
139 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 0.8828 - loss: -1.6845 - val_accuracy: 0.8709 - val_loss: -1.3626\n",
140 | "Epoch 39/100\n",
141 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8765 - loss: -1.7465 - val_accuracy: 0.8709 - val_loss: -1.3792\n",
142 | "Epoch 40/100\n",
143 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 0.8796 - loss: -1.6952 - val_accuracy: 0.8742 - val_loss: -1.3875\n",
144 | "Epoch 41/100\n",
145 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8781 - loss: -1.7366 - val_accuracy: 0.8775 - val_loss: -1.3883\n",
146 | "Epoch 42/100\n",
147 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 0.8841 - loss: -1.6870 - val_accuracy: 0.8705 - val_loss: -1.3506\n",
148 | "Epoch 43/100\n",
149 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8820 - loss: -1.6876 - val_accuracy: 0.8712 - val_loss: -1.3620\n",
150 | "Epoch 44/100\n",
151 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 428us/step - accuracy: 0.8777 - loss: -1.7897 - val_accuracy: 0.8753 - val_loss: -1.3851\n",
152 | "Epoch 45/100\n",
153 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 388us/step - accuracy: 0.8832 - loss: -1.7775 - val_accuracy: 0.8727 - val_loss: -1.3633\n",
154 | "Epoch 46/100\n",
155 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 386us/step - accuracy: 0.8853 - loss: -1.6981 - val_accuracy: 0.8705 - val_loss: -1.3577\n",
156 | "Epoch 47/100\n",
157 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 384us/step - accuracy: 0.8828 - loss: -1.8596 - val_accuracy: 0.8738 - val_loss: -1.3816\n",
158 | "Epoch 48/100\n",
159 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8837 - loss: -1.8544 - val_accuracy: 0.8756 - val_loss: -1.3749\n",
160 | "Epoch 49/100\n",
161 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8864 - loss: -1.8201 - val_accuracy: 0.8771 - val_loss: -1.3928\n",
162 | "Epoch 50/100\n",
163 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 0.8843 - loss: -1.7168 - val_accuracy: 0.8738 - val_loss: -1.4089\n",
164 | "Epoch 51/100\n",
165 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 416us/step - accuracy: 0.8825 - loss: -1.7630 - val_accuracy: 0.8742 - val_loss: -1.3914\n",
166 | "Epoch 52/100\n",
167 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 404us/step - accuracy: 0.8786 - loss: -1.7057 - val_accuracy: 0.8753 - val_loss: -1.3763\n",
168 | "Epoch 53/100\n",
169 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 414us/step - accuracy: 0.8798 - loss: -1.5794 - val_accuracy: 0.8767 - val_loss: -1.4216\n",
170 | "Epoch 54/100\n",
171 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8819 - loss: -1.6349 - val_accuracy: 0.8694 - val_loss: -1.3702\n",
172 | "Epoch 55/100\n",
173 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 408us/step - accuracy: 0.8843 - loss: -1.7700 - val_accuracy: 0.8756 - val_loss: -1.3754\n",
174 | "Epoch 56/100\n",
175 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8896 - loss: -1.9302 - val_accuracy: 0.8756 - val_loss: -1.3989\n",
176 | "Epoch 57/100\n",
177 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 407us/step - accuracy: 0.8867 - loss: -1.8582 - val_accuracy: 0.8767 - val_loss: -1.3943\n",
178 | "Epoch 58/100\n",
179 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 390us/step - accuracy: 0.8876 - loss: -1.7264 - val_accuracy: 0.8745 - val_loss: -1.3807\n",
180 | "Epoch 59/100\n",
181 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 379us/step - accuracy: 0.8798 - loss: -1.7206 - val_accuracy: 0.8745 - val_loss: -1.3763\n",
182 | "Epoch 60/100\n",
183 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - accuracy: 0.8840 - loss: -1.6810 - val_accuracy: 0.8767 - val_loss: -1.3858\n",
184 | "Epoch 61/100\n",
185 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - accuracy: 0.8850 - loss: -1.7133 - val_accuracy: 0.8712 - val_loss: -1.3946\n",
186 | "Epoch 62/100\n",
187 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 423us/step - accuracy: 0.8815 - loss: -1.6904 - val_accuracy: 0.8767 - val_loss: -1.3582\n",
188 | "Epoch 63/100\n",
189 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 0.8871 - loss: -1.7279 - val_accuracy: 0.8756 - val_loss: -1.3944\n",
190 | "Epoch 64/100\n",
191 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 410us/step - accuracy: 0.8817 - loss: -1.7165 - val_accuracy: 0.8804 - val_loss: -1.4078\n",
192 | "Epoch 65/100\n",
193 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 415us/step - accuracy: 0.8889 - loss: -1.7555 - val_accuracy: 0.8738 - val_loss: -1.4008\n",
194 | "Epoch 66/100\n",
195 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - accuracy: 0.8860 - loss: -1.8302 - val_accuracy: 0.8734 - val_loss: -1.3619\n",
196 | "Epoch 67/100\n",
197 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 409us/step - accuracy: 0.8834 - loss: -1.7671 - val_accuracy: 0.8779 - val_loss: -1.3922\n",
198 | "Epoch 68/100\n",
199 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 387us/step - accuracy: 0.8905 - loss: -1.7985 - val_accuracy: 0.8738 - val_loss: -1.4075\n",
200 | "Epoch 69/100\n",
201 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 370us/step - accuracy: 0.8880 - loss: -1.8513 - val_accuracy: 0.8749 - val_loss: -1.3816\n",
202 | "Epoch 70/100\n",
203 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8787 - loss: -1.7095 - val_accuracy: 0.8723 - val_loss: -1.3702\n",
204 | "Epoch 71/100\n",
205 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 370us/step - accuracy: 0.8819 - loss: -1.7304 - val_accuracy: 0.8779 - val_loss: -1.3912\n",
206 | "Epoch 72/100\n",
207 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - accuracy: 0.8782 - loss: -1.6296 - val_accuracy: 0.8764 - val_loss: -1.3787\n",
208 | "Epoch 73/100\n",
209 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 479us/step - accuracy: 0.8783 - loss: -1.7065 - val_accuracy: 0.8804 - val_loss: -1.4012\n",
210 | "Epoch 74/100\n",
211 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 438us/step - accuracy: 0.8886 - loss: -1.8899 - val_accuracy: 0.8775 - val_loss: -1.3869\n",
212 | "Epoch 75/100\n",
213 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 404us/step - accuracy: 0.8873 - loss: -1.7559 - val_accuracy: 0.8793 - val_loss: -1.3726\n",
214 | "Epoch 76/100\n",
215 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 410us/step - accuracy: 0.8852 - loss: -1.6442 - val_accuracy: 0.8760 - val_loss: -1.3882\n",
216 | "Epoch 77/100\n",
217 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 615us/step - accuracy: 0.8810 - loss: -1.7353 - val_accuracy: 0.8727 - val_loss: -1.4004\n",
218 | "Epoch 78/100\n",
219 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 433us/step - accuracy: 0.8925 - loss: -1.8096 - val_accuracy: 0.8723 - val_loss: -1.3988\n",
220 | "Epoch 79/100\n",
221 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 408us/step - accuracy: 0.8832 - loss: -1.8142 - val_accuracy: 0.8734 - val_loss: -1.3991\n",
222 | "Epoch 80/100\n",
223 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 495us/step - accuracy: 0.8867 - loss: -1.7876 - val_accuracy: 0.8764 - val_loss: -1.3751\n",
224 | "Epoch 81/100\n",
225 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 527us/step - accuracy: 0.8864 - loss: -1.8754 - val_accuracy: 0.8786 - val_loss: -1.3795\n",
226 | "Epoch 82/100\n",
227 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 458us/step - accuracy: 0.8861 - loss: -1.8558 - val_accuracy: 0.8808 - val_loss: -1.4015\n",
228 | "Epoch 83/100\n",
229 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 514us/step - accuracy: 0.8902 - loss: -1.8730 - val_accuracy: 0.8753 - val_loss: -1.3983\n",
230 | "Epoch 84/100\n",
231 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 472us/step - accuracy: 0.8860 - loss: -1.7296 - val_accuracy: 0.8775 - val_loss: -1.4035\n",
232 | "Epoch 85/100\n",
233 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 485us/step - accuracy: 0.8894 - loss: -1.7704 - val_accuracy: 0.8764 - val_loss: -1.3866\n",
234 | "Epoch 86/100\n",
235 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 424us/step - accuracy: 0.8869 - loss: -1.7921 - val_accuracy: 0.8760 - val_loss: -1.4037\n",
236 | "Epoch 87/100\n",
237 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 383us/step - accuracy: 0.8850 - loss: -1.8886 - val_accuracy: 0.8797 - val_loss: -1.4137\n",
238 | "Epoch 88/100\n",
239 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 429us/step - accuracy: 0.8835 - loss: -1.7146 - val_accuracy: 0.8771 - val_loss: -1.3927\n",
240 | "Epoch 89/100\n",
241 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 426us/step - accuracy: 0.8820 - loss: -1.5299 - val_accuracy: 0.8742 - val_loss: -1.3842\n",
242 | "Epoch 90/100\n",
243 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - accuracy: 0.8858 - loss: -1.8870 - val_accuracy: 0.8786 - val_loss: -1.4126\n",
244 | "Epoch 91/100\n",
245 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 404us/step - accuracy: 0.8859 - loss: -1.7234 - val_accuracy: 0.8742 - val_loss: -1.3798\n",
246 | "Epoch 92/100\n",
247 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 402us/step - accuracy: 0.8848 - loss: -1.6446 - val_accuracy: 0.8760 - val_loss: -1.3779\n",
248 | "Epoch 93/100\n",
249 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8903 - loss: -1.9362 - val_accuracy: 0.8767 - val_loss: -1.3850\n",
250 | "Epoch 94/100\n",
251 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8884 - loss: -1.8355 - val_accuracy: 0.8793 - val_loss: -1.4076\n",
252 | "Epoch 95/100\n",
253 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8913 - loss: -1.7340 - val_accuracy: 0.8701 - val_loss: -1.3642\n",
254 | "Epoch 96/100\n",
255 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8853 - loss: -1.7358 - val_accuracy: 0.8793 - val_loss: -1.3997\n",
256 | "Epoch 97/100\n",
257 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8902 - loss: -1.7987 - val_accuracy: 0.8771 - val_loss: -1.3907\n",
258 | "Epoch 98/100\n",
259 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 0.8916 - loss: -1.8432 - val_accuracy: 0.8808 - val_loss: -1.3981\n",
260 | "Epoch 99/100\n",
261 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8862 - loss: -1.8597 - val_accuracy: 0.8720 - val_loss: -1.3640\n",
262 | "Epoch 100/100\n",
263 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 0.8913 - loss: -1.9094 - val_accuracy: 0.8771 - val_loss: -1.3733\n",
264 | "\u001b[1m284/284\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 255us/step\n"
265 | ]
266 | },
267 | {
268 | "data": {
269 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIhCAYAAAB67ibXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAByL0lEQVR4nO3deXwNd////+fJdrIHQSJpiH2p2EvtoVWtpZRStURspa2tWtSntQS1b21d1JrYSnWhuKrqsq+1b6UoUqlGUZpIEFnm94dfzreniSWEk9M87rfb3K7Me97zntfMyXVdeXrPzDEZhmEIAAAAAAA75WDrAgAAAAAAeBQEWwAAAACAXSPYAgAAAADsGsEWAAAAAGDXCLYAAAAAALtGsAUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAQI4SFRUlk8mU6fLee+89lmMeP35cI0aMUHR09GMZ/1FER0fLZDJp0qRJti7loe3cuVMjRozQX3/9ZetSss0XX3yhp59+Wm5ubjKZTDp06NBjO9bmzZst/x2IiorKtE/Dhg1lMpkUHBycrccODg5WeHj4Q+1rMpk0YsSI+/ZbuHCh2rVrp9KlS8vBwSHbzwFA7uBk6wIAAMhMZGSkypQpY9UWEBDwWI51/PhxRUREKDQ0lD+qH4OdO3cqIiJC4eHhypMnj63LeWSXL19Wp06d9OKLL2rGjBkym80qVarUYz+ul5eX5s2blyFonjt3Tps3b5a3t/djr+FxWLRokS5evKjq1asrLS1NycnJti4JgB0i2AIAcqTy5curWrVqti7jkSQnJ8tkMsnJKXf+3+3Nmzfl6upq6zKy3alTp5ScnKyOHTuqfv362TLmjRs35O7ufs8+r732mubOnavTp0+rZMmSlvb58+crMDBQISEhOn78eLbU8yStW7dODg53biJs1qyZjh07ZuOKANgjbkUGANilL774QjVr1pSHh4c8PT3VuHFjHTx40KrPvn371K5dOwUHB8vNzU3BwcF6/fXX9euvv1r6REVFqU2bNpKkBg0aZLjl8263YoaGhio0NNSynn676KJFi/Tuu+8qMDBQZrNZv/zyiyTpf//7n5577jl5e3vL3d1dtWvX1oYNGx7q3NNv1964caN69OghX19feXt7KywsTImJibp48aLatm2rPHnyqFChQnrvvfesZsHSb2+eMGGCPvroIxUuXFiurq6qVq1apjVt375dzz33nLy8vOTu7q5atWrpv//9b6Y1/fDDD+ratasKFCggd3d3DRkyRAMHDpQkFS1a1HJ9N2/eLOnO5/jCCy+oUKFCcnNzU9myZfX+++8rMTHRavzw8HB5enrql19+UZMmTeTp6amgoCC9++67SkpKsuqblJSkkSNHqmzZsnJ1dZWvr68aNGignTt3WvoYhqEZM2aoUqVKcnNzU968efXqq6/q7Nmz97z24eHhqlOnjqQ7QdNkMln9HqxatUo1a9aUu7u7vLy81KhRI+3atctqjBEjRshkMunAgQN69dVXlTdvXhUvXvyex5WkRo0aKSgoSPPnz7e0paWlacGCBercubMlHP7drVu3NGTIEBUtWlQuLi4KDAzU22+/neG28OTkZA0aNEj+/v5yd3dXnTp1tGfPnkzruHjxonr27KmnnnpKLi4uKlq0qCIiIpSSknLfc8hMZnUDQFbxvyQAgBwpNTVVKSkpVku6MWPG6PXXX1e5cuW0fPlyLVq0SNevX1fdunWtZqyio6NVunRpTZs2TevWrdP48eMVGxurZ555RleuXJEkNW3aVGPGjJEk/ec//9GuXbu0a9cuNW3a9KHqHjJkiM6fP6/PPvtMq1evVsGCBbV48WK98MIL8vb21oIFC7R8+XLly5dPjRs3fuhwK0ndu3eXj4+Pli1bpg8//FCff/65evTooaZNm6pixYr66quv1LlzZ02ePFmffvpphv2nT5+u77//XtOmTdPixYvl4OCgl156ySqIbdmyRQ0bNlRcXJzmzZunpUuXysvLS82bN9cXX3yRYcyuXbvK2dlZixYt0ldffaU333xTffr0kSR98803lutbpUoVSdLp06fVpEkTzZs3T99//7369++v5cuXq3nz5hnGTk5O1ssvv6znnntO3377rbp27aqpU6dq/Pjxlj4pKSl66aWXNGrUKDVr1kwrVqxQVFSUatWqpfPnz1v69ezZU/3799fzzz+vlStXasaMGfrpp59Uq1Yt/fHHH3e95kOHDtV//vMfSXd+D3ft2qUZM2ZIkj7//HO1aNFC3t7eWrp0qebNm6dr164pNDRU27dvzzBWq1atVKJECX355Zf67LPP7nrMdA4ODgoPD9fChQuVmpoqSfrhhx/022+/qUuXLhn6G4ahli1batKkSerU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B9WjRw95eHioc+fOSkxMVLNmzdSwYUMtXrxY586dU79+/e56/Fq1amnatGkaNmyYTp48KUny9PS8Z8379u1T3759tWjRItWqVUtXr17Vtm3bHuicbty4oRdffFHPPvus9u7dq0uXLql79+7q3bu3oqKiLGNs2LBB3t7eWr9+vQzD0I0bN9SgQQPVrVtXW7dulZOTk0aPHq0XX3xRR44ckYuLS4Y6k5KSlJSUZFmPj4+/94cBAAAAAP9AsL2P69ev6+OPP9b06dPVuXNnSVLx4sVVp04dy0xk//791apVK8s+o0aN0uTJky1tRYsW1fHjxzVr1ix17txZS5YsUWpqqubPny93d3c9/fTT+u233/Tmm29mWoOLi4t8fHxkMpnk7+//QHWfP39eHh4eatasmby8vFSkSBFVrlz5vuckSUuWLNHNmze1cOFCeXh4SJKmT5+u5s2ba/z48fLz85MkeXh4aO7cuZbAOn/+fDk4OGju3LmWW6gjIyOVJ08ebd68WS+88EKGOseOHauIiIgHOicAAAAAyAy3It/HiRMnlJSUpOeee+6ufapVq2b5+fLly4qJiVG3bt3k6elpWUaPHq0zZ85YxqxYsaLc3d0t+9WsWTNb627UqJGKFCmiYsWKqVOnTlqyZIlu3LjxQOeUXl96qJWk2rVrKy0tzTJjLEkhISFWs7D79+/XL7/8Ii8vL8t558uXT7du3bKc+z8NGTJEcXFxliUmJiY7Th8AAABALsKM7X24ubndt8/fA2BaWpokac6cOapRo4ZVP0dHR0mSYRjZWGHmvLy8dODAAW3evFk//PCDhg0bphEjRmjv3r33PSfDMO760qq/t//9vKU75161alUtWbIkw34FChTIdDyz2Syz2Xy/0wEAAACAu2LG9j5KliwpNzc3bdiw4YH6+/n5KTAwUGfPnlWJEiWslqJFi0qSypUrp8OHD+vmzZuW/Xbv3n3PcV1cXJSampql2p2cnPT8889rwoQJOnLkiKKjo7Vx48b7nlO5cuV06NAhJSYmWtp27NghBwcHy0uiMlOlShWdPn1aBQsWzHDu6V9bBAAAAADZjWB7H66urho8eLAGDRqkhQsX6syZM9q9e7fmzZt3131GjBihsWPH6uOPP9apU6d09OhRRUZGasqUKZKk9u3by8HBQd26ddPx48f13XffadKkSfesIzg4WAkJCdqwYYOuXLliua34btasWaNPPvlEhw4d0q+//qqFCxcqLS1NpUuXvu85dejQQa6ururcubOOHTumTZs2qU+fPurUqZPl+drMdOjQQfnz51eLFi20bds2nTt3Tlu2bFG/fv3022+/3bNeAAAAAHhYBNsHMHToUL377rsaNmyYypYtq9dee02XLl26a//u3btr7ty5ioqKUkhIiOrXr6+oqCjLjK2np6dWr16t48ePq3Llyvrggw80fvz4e9ZQq1Yt9erVS6+99poKFCigCRMm3LN/njx59M0336hhw4YqW7asPvvsMy1dulRPP/30fc/J3d1d69at09WrV/XMM8/o1Vdf1XPPPafp06ff85ju7u7aunWrChcurFatWqls2bLq2rWrbt68KW9v73vuCwAAAAAPy2Q8iQc+gQcUHx8vHx8fBfVfLgez+/13AAAAAJAtosc1tXUJVtKzQVxc3H0nypixBQAAAADYNYKtndq2bZvV1wn9cwEAAACA3IKv+7FT1apV06FDh2xdBgAAAADYHMHWTrm5ualEiRK2LgMAAAAAbI5bkQEAAAAAdo1gCwAAAACwa9yKjBzpWERjvvsWAAAAwANhxhYAAAAAYNcItgAAAAAAu0awBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNYAsAAAAAsGt83Q9ypPLD18nB7G7rMgAAAJDLRY9rausS8ACYsQUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrD9F4uKilKePHkytAcHB2vatGlPvB4AAAAAeBwItgAAAAAAu0awzSFCQ0PVu3dv9e7dW3ny5JGvr68+/PBDGYYh6c4s6+jRoxUWFiZPT08VKVJE3377rS5fvqwWLVrI09NTISEh2rdvnyRp8+bN6tKli+Li4mQymWQymTRixAiFhobq119/1TvvvGNpT0xMlLe3t7766iurmlavXi0PDw9dv35d0dHRMplMWrZsmWrVqiVXV1c9/fTT2rx5s9U+x48fV5MmTeTp6Sk/Pz916tRJV65ceSLXEAAAAEDuRLDNQRYsWCAnJyf9+OOP+uSTTzR16lTNnTvXsn3q1KmqXbu2Dh48qKZNm6pTp04KCwtTx44ddeDAAZUoUUJhYWEyDEO1atXStGnT5O3trdjY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45raugQA/xLM2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrAFAAAAANg1gi0AAAAAwK4RbAEAAAAAdo1gCwAAAACwawTbHCA0NFT9+/e3dRkAAAAAYJcItnhsgoODNW3aNFuXAQAAAOBfjmALAAAAALBrBNsnLDExUWFhYfL09FShQoU0efJkq+3Xrl1TWFiY8ubNK3d3d7300ks6ffq0JMkwDBUoUEBff/21pX+lSpVUsGBBy/quXbvk7OyshIQESZLJZNLcuXP1yiuvyN3dXSVLltSqVass/Tdv3iyTyaT//ve/qlixolxdXVWjRg0dPXrU0icqKkp58uTRmjVrVLp0abm7u+vVV19VYmKiFixYoODgYOXNm1d9+vRRamqqpDu3V//666965513ZDKZZDKZsv9iAgAAAIAItk/cwIEDtWnTJq1YsUI//PCDNm/erP3791u2h4eHa9++fVq1apV27dolwzDUpEkTJScny2QyqV69etq8ebOkOyH4+PHjSk5O1vHjxyXdCapVq1aVp6enZcyIiAi1bdtWR44cUZMmTdShQwddvXo1Q12TJk3S3r17VbBgQb388stKTk62bL9x44Y++eQTLVu2TN9//702b96sVq1a6bvvvtN3332nRYsWafbs2frqq68kSd98842eeuopjRw5UrGxsYqNjc30eiQlJSk+Pt5qAQAAAICsINg+QQkJCZo3b54mTZqkRo0aKSQkRAsWLLDMcp4+fVqrVq3S3LlzVbduXVWsWFFLlizRhQsXtHLlSkl3ZkLTg+3WrVtVsWJFNWzY0NK2efNmhYaGWh03PDxcr7/+ukqUKKExY8YoMTFRe/bsseozfPhwq5r++OMPrVixwrI9OTlZM2fOVOXKlVWvXj29+uqr2r59u+bNm6dy5cqpWbNmatCggTZt2iRJypcvnxwdHeXl5SV/f3/5+/tnek3Gjh0rHx8fyxIUFPSIVxkAAABAbkOwfYLOnDmj27dvq2bNmpa2fPnyqXTp0pKkEydOyMnJSTVq1LBs9/X1VenSpXXixAlJd4LtTz/9pCtXrmjLli0KDQ1VaGiotmzZopSUFO3cuVP169e3Om6FChUsP3t4eMjLy0uXLl2y6pNZTenHlCR3d3cVL17csu7n56fg4GCrmWE/P78M497PkCFDFBcXZ1liYmKytD8AAAAAEGyfIMMwHmq7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AEBmcnWwLVeunFJSUvTjjz9a3Yp86tQplS1bVpK0bds2tWjRQh07dpR0J7ydPn3asj07ODs7KzU11aqtbNmy2r59u8LCwixtO3fufODj1qpVS0FBQfriiy+0du1atWnTRi4uLpLunOOJEyc0a9Ys1a1bV5K0ffv2e45XoEABXb9+XYmJifLw8JCkDN9xW6VKFZ08eVIlSpR4oBoBAAAAIDvk6mBbsmRJtWjRQj169NCsWbPk5eWl999/X4GBgWrRooUkqUSJEvr666+1c+dO5c2bV1OmTNHFixezNdgGBwdrw4YNql27tsxms/LmzauBAweqbdu2qlKlip577jmtXr1a33zzjf73v/890Jgmk0nt27fXZ599plOnTlm9dCpv3rzy9fXV7NmzVahQIZ0/f17vv//+PcerUaOG3N3d9X//93/q06eP9uzZo6ioKKs+w4YNU7NmzRQUFKQ2bdrIwcFBR44c0dGjRzV69OgsXxcAAAAAeBC5+hlb6c7biKtWrapmzZqpZs2aMgxD3333neXW4qFDh6pKlSpq3LixQkND5e/vb/WSp+wwefJkrV+/XkFBQapcubIkqWXLlvr44481ceJEPf3005o1a5YiIyMVGhr6wON26NBBx48fV2BgoNXzug4ODlq2bJn279+v8uXL65133tHEiRPvOVa+fPm0ePFifffdd5avPPrnVxo1btxYa9as0fr16/XMM8/o2Wef1ZQpU1SkSJEHrhkAAAAAsipXvhUZOVf6m894KzIAAP8+vBUZQFbwVmQAAAAAQK5BsH3MlixZYvX1N39fnn766RwzJgAAAADYq1z98qgn4eWXX7b6nty/++dXBNlyTAAAAACwVwTbx8zLy0teXl45fkwAAAAAsFfcigwAAAAAsGsEWwAAAACAXeNWZORIxyIa3/eV3gAAAAAgMWMLAAAAALBzBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrAFAAAAANg1vu4HOVL54evkYHa3dRkAgFwkelxTW5cAAHhIzNgCAAAAAOwawRYAAAAAYNcItgAAAAAAu0awBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNYAsAAAAAsGsEWwAAAACAXSPYAgAAAADsGsEWAAAAAGDXCLaw8v3336tOnTrKkyePfH191axZM505c8ayfefOnapUqZJcXV1V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",
270 | "text/plain": [
271 | ""
272 | ]
273 | },
274 | "metadata": {},
275 | "output_type": "display_data"
276 | },
277 | {
278 | "name": "stdout",
279 | "output_type": "stream",
280 | "text": [
281 | "Epoch 1/100\n"
282 | ]
283 | },
284 | {
285 | "name": "stderr",
286 | "output_type": "stream",
287 | "text": [
288 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/keras/src/layers/core/input_layer.py:25: UserWarning: Argument `input_shape` is deprecated. Use `shape` instead.\n",
289 | " warnings.warn(\n"
290 | ]
291 | },
292 | {
293 | "name": "stdout",
294 | "output_type": "stream",
295 | "text": [
296 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 858us/step - accuracy: 0.6178 - loss: 1.4336 - val_accuracy: 0.8326 - val_loss: -0.5051\n",
297 | "Epoch 2/100\n",
298 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 465us/step - accuracy: 0.8194 - loss: -0.8103 - val_accuracy: 0.8484 - val_loss: -0.9117\n",
299 | "Epoch 3/100\n",
300 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 452us/step - accuracy: 0.8554 - loss: -1.2130 - val_accuracy: 0.8536 - val_loss: -1.0127\n",
301 | "Epoch 4/100\n",
302 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8613 - loss: -1.2440 - val_accuracy: 0.8617 - val_loss: -1.1181\n",
303 | "Epoch 5/100\n",
304 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8684 - loss: -1.3051 - val_accuracy: 0.8642 - val_loss: -1.1608\n",
305 | "Epoch 6/100\n",
306 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8773 - loss: -1.4941 - val_accuracy: 0.8624 - val_loss: -1.2030\n",
307 | "Epoch 7/100\n",
308 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 447us/step - accuracy: 0.8746 - loss: -1.3975 - val_accuracy: 0.8613 - val_loss: -1.2102\n",
309 | "Epoch 8/100\n",
310 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8632 - loss: -1.4111 - val_accuracy: 0.8690 - val_loss: -1.2659\n",
311 | "Epoch 9/100\n",
312 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8728 - loss: -1.4978 - val_accuracy: 0.8606 - val_loss: -1.2504\n",
313 | "Epoch 10/100\n",
314 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8713 - loss: -1.3678 - val_accuracy: 0.8720 - val_loss: -1.2998\n",
315 | "Epoch 11/100\n",
316 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8782 - loss: -1.5190 - val_accuracy: 0.8687 - val_loss: -1.2962\n",
317 | "Epoch 12/100\n",
318 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 0.8798 - loss: -1.5222 - val_accuracy: 0.8606 - val_loss: -1.2823\n",
319 | "Epoch 13/100\n",
320 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 450us/step - accuracy: 0.8767 - loss: -1.6958 - val_accuracy: 0.8690 - val_loss: -1.3219\n",
321 | "Epoch 14/100\n",
322 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8821 - loss: -1.7705 - val_accuracy: 0.8657 - val_loss: -1.3192\n",
323 | "Epoch 15/100\n",
324 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 0.8708 - loss: -1.6420 - val_accuracy: 0.8716 - val_loss: -1.3340\n",
325 | "Epoch 16/100\n",
326 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8773 - loss: -1.5499 - val_accuracy: 0.8675 - val_loss: -1.3314\n",
327 | "Epoch 17/100\n",
328 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 451us/step - accuracy: 0.8743 - loss: -1.6845 - val_accuracy: 0.8705 - val_loss: -1.3392\n",
329 | "Epoch 18/100\n",
330 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8805 - loss: -1.6495 - val_accuracy: 0.8642 - val_loss: -1.3504\n",
331 | "Epoch 19/100\n",
332 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8763 - loss: -1.6581 - val_accuracy: 0.8650 - val_loss: -1.3095\n",
333 | "Epoch 20/100\n",
334 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8779 - loss: -1.7513 - val_accuracy: 0.8690 - val_loss: -1.3238\n",
335 | "Epoch 21/100\n",
336 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 441us/step - accuracy: 0.8752 - loss: -1.6190 - val_accuracy: 0.8679 - val_loss: -1.3661\n",
337 | "Epoch 22/100\n",
338 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8768 - loss: -1.7060 - val_accuracy: 0.8712 - val_loss: -1.3538\n",
339 | "Epoch 23/100\n",
340 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8784 - loss: -1.6088 - val_accuracy: 0.8709 - val_loss: -1.3472\n",
341 | "Epoch 24/100\n",
342 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8787 - loss: -1.6456 - val_accuracy: 0.8639 - val_loss: -1.3278\n",
343 | "Epoch 25/100\n",
344 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8743 - loss: -1.7221 - val_accuracy: 0.8664 - val_loss: -1.3729\n",
345 | "Epoch 26/100\n",
346 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8802 - loss: -1.7515 - val_accuracy: 0.8631 - val_loss: -1.3489\n",
347 | "Epoch 27/100\n",
348 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 467us/step - accuracy: 0.8781 - loss: -1.7995 - val_accuracy: 0.8687 - val_loss: -1.3648\n",
349 | "Epoch 28/100\n",
350 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8787 - loss: -1.6971 - val_accuracy: 0.8628 - val_loss: -1.3191\n",
351 | "Epoch 29/100\n",
352 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 450us/step - accuracy: 0.8780 - loss: -1.8348 - val_accuracy: 0.8716 - val_loss: -1.3547\n",
353 | "Epoch 30/100\n",
354 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 473us/step - accuracy: 0.8806 - loss: -1.6653 - val_accuracy: 0.8657 - val_loss: -1.3495\n",
355 | "Epoch 31/100\n",
356 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 0.8795 - loss: -1.8820 - val_accuracy: 0.8672 - val_loss: -1.3557\n",
357 | "Epoch 32/100\n",
358 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8819 - loss: -1.7013 - val_accuracy: 0.8628 - val_loss: -1.3336\n",
359 | "Epoch 33/100\n",
360 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8821 - loss: -1.7758 - val_accuracy: 0.8650 - val_loss: -1.3524\n",
361 | "Epoch 34/100\n",
362 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8789 - loss: -1.6260 - val_accuracy: 0.8657 - val_loss: -1.3402\n",
363 | "Epoch 35/100\n",
364 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8744 - loss: -1.6410 - val_accuracy: 0.8683 - val_loss: -1.3469\n",
365 | "Epoch 36/100\n",
366 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8792 - loss: -1.6932 - val_accuracy: 0.8720 - val_loss: -1.3719\n",
367 | "Epoch 37/100\n",
368 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8814 - loss: -1.8167 - val_accuracy: 0.8675 - val_loss: -1.3405\n",
369 | "Epoch 38/100\n",
370 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8815 - loss: -1.8800 - val_accuracy: 0.8698 - val_loss: -1.3740\n",
371 | "Epoch 39/100\n",
372 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8800 - loss: -1.7262 - val_accuracy: 0.8664 - val_loss: -1.3663\n",
373 | "Epoch 40/100\n",
374 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8807 - loss: -1.7588 - val_accuracy: 0.8694 - val_loss: -1.3665\n",
375 | "Epoch 41/100\n",
376 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 517us/step - accuracy: 0.8805 - loss: -1.7869 - val_accuracy: 0.8687 - val_loss: -1.3425\n",
377 | "Epoch 42/100\n",
378 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 490us/step - accuracy: 0.8748 - loss: -1.7476 - val_accuracy: 0.8723 - val_loss: -1.3745\n",
379 | "Epoch 43/100\n",
380 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 466us/step - accuracy: 0.8774 - loss: -1.6926 - val_accuracy: 0.8694 - val_loss: -1.3657\n",
381 | "Epoch 44/100\n",
382 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 476us/step - accuracy: 0.8839 - loss: -1.8032 - val_accuracy: 0.8727 - val_loss: -1.3449\n",
383 | "Epoch 45/100\n",
384 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8885 - loss: -1.7727 - val_accuracy: 0.8672 - val_loss: -1.3236\n",
385 | "Epoch 46/100\n",
386 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8822 - loss: -1.6439 - val_accuracy: 0.8683 - val_loss: -1.3235\n",
387 | "Epoch 47/100\n",
388 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 459us/step - accuracy: 0.8787 - loss: -1.6322 - val_accuracy: 0.8716 - val_loss: -1.3459\n",
389 | "Epoch 48/100\n",
390 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 449us/step - accuracy: 0.8844 - loss: -1.8037 - val_accuracy: 0.8760 - val_loss: -1.3629\n",
391 | "Epoch 49/100\n",
392 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8860 - loss: -1.6096 - val_accuracy: 0.8701 - val_loss: -1.3535\n",
393 | "Epoch 50/100\n",
394 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8813 - loss: -1.7274 - val_accuracy: 0.8701 - val_loss: -1.3347\n",
395 | "Epoch 51/100\n",
396 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8800 - loss: -1.8745 - val_accuracy: 0.8727 - val_loss: -1.3404\n",
397 | "Epoch 52/100\n",
398 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 483us/step - accuracy: 0.8895 - loss: -1.8273 - val_accuracy: 0.8738 - val_loss: -1.3548\n",
399 | "Epoch 53/100\n",
400 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468us/step - accuracy: 0.8812 - loss: -1.7788 - val_accuracy: 0.8712 - val_loss: -1.3465\n",
401 | "Epoch 54/100\n",
402 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 502us/step - accuracy: 0.8838 - loss: -1.7783 - val_accuracy: 0.8694 - val_loss: -1.3274\n",
403 | "Epoch 55/100\n",
404 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 541us/step - accuracy: 0.8856 - loss: -1.7364 - val_accuracy: 0.8653 - val_loss: -1.3536\n",
405 | "Epoch 56/100\n",
406 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 537us/step - accuracy: 0.8851 - loss: -1.8523 - val_accuracy: 0.8675 - val_loss: -1.3313\n",
407 | "Epoch 57/100\n",
408 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 514us/step - accuracy: 0.8771 - loss: -1.6236 - val_accuracy: 0.8720 - val_loss: -1.3777\n",
409 | "Epoch 58/100\n",
410 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 592us/step - accuracy: 0.8821 - loss: -1.7619 - val_accuracy: 0.8690 - val_loss: -1.3381\n",
411 | "Epoch 59/100\n",
412 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 556us/step - accuracy: 0.8821 - loss: -1.8201 - val_accuracy: 0.8683 - val_loss: -1.3615\n",
413 | "Epoch 60/100\n",
414 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 512us/step - accuracy: 0.8800 - loss: -1.7330 - val_accuracy: 0.8668 - val_loss: -1.3224\n",
415 | "Epoch 61/100\n",
416 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 532us/step - accuracy: 0.8820 - loss: -1.8925 - val_accuracy: 0.8731 - val_loss: -1.3969\n",
417 | "Epoch 62/100\n",
418 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 494us/step - accuracy: 0.8880 - loss: -1.8671 - val_accuracy: 0.8687 - val_loss: -1.3691\n",
419 | "Epoch 63/100\n",
420 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 494us/step - accuracy: 0.8890 - loss: -1.8546 - val_accuracy: 0.8675 - val_loss: -1.3695\n",
421 | "Epoch 64/100\n",
422 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468us/step - accuracy: 0.8761 - loss: -1.5890 - val_accuracy: 0.8650 - val_loss: -1.3372\n",
423 | "Epoch 65/100\n",
424 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 447us/step - accuracy: 0.8824 - loss: -1.6818 - val_accuracy: 0.8731 - val_loss: -1.3971\n",
425 | "Epoch 66/100\n",
426 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 529us/step - accuracy: 0.8864 - loss: -1.8561 - val_accuracy: 0.8775 - val_loss: -1.3782\n",
427 | "Epoch 67/100\n",
428 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 525us/step - accuracy: 0.8860 - loss: -1.7357 - val_accuracy: 0.8764 - val_loss: -1.3774\n",
429 | "Epoch 68/100\n",
430 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 480us/step - accuracy: 0.8885 - loss: -1.8720 - val_accuracy: 0.8764 - val_loss: -1.3900\n",
431 | "Epoch 69/100\n",
432 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 463us/step - accuracy: 0.8869 - loss: -1.7002 - val_accuracy: 0.8720 - val_loss: -1.3602\n",
433 | "Epoch 70/100\n",
434 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 493us/step - accuracy: 0.8908 - loss: -1.7895 - val_accuracy: 0.8731 - val_loss: -1.3384\n",
435 | "Epoch 71/100\n",
436 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 489us/step - accuracy: 0.8878 - loss: -1.8706 - val_accuracy: 0.8764 - val_loss: -1.3803\n",
437 | "Epoch 72/100\n",
438 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 454us/step - accuracy: 0.8884 - loss: -1.7818 - val_accuracy: 0.8742 - val_loss: -1.3735\n",
439 | "Epoch 73/100\n",
440 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 563us/step - accuracy: 0.8858 - loss: -1.6874 - val_accuracy: 0.8698 - val_loss: -1.3472\n",
441 | "Epoch 74/100\n",
442 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 515us/step - accuracy: 0.8825 - loss: -1.6849 - val_accuracy: 0.8756 - val_loss: -1.3636\n",
443 | "Epoch 75/100\n",
444 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 469us/step - accuracy: 0.8916 - loss: -1.8412 - val_accuracy: 0.8712 - val_loss: -1.3626\n",
445 | "Epoch 76/100\n",
446 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 558us/step - accuracy: 0.8814 - loss: -1.8478 - val_accuracy: 0.8745 - val_loss: -1.4109\n",
447 | "Epoch 77/100\n",
448 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 571us/step - accuracy: 0.8782 - loss: -1.7011 - val_accuracy: 0.8790 - val_loss: -1.3901\n",
449 | "Epoch 78/100\n",
450 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 501us/step - accuracy: 0.8844 - loss: -1.6752 - val_accuracy: 0.8709 - val_loss: -1.3627\n",
451 | "Epoch 79/100\n",
452 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 542us/step - accuracy: 0.8828 - loss: -1.7313 - val_accuracy: 0.8738 - val_loss: -1.3834\n",
453 | "Epoch 80/100\n",
454 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 530us/step - accuracy: 0.8795 - loss: -1.7037 - val_accuracy: 0.8756 - val_loss: -1.3930\n",
455 | "Epoch 81/100\n",
456 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 530us/step - accuracy: 0.8925 - loss: -1.9691 - val_accuracy: 0.8731 - val_loss: -1.3690\n",
457 | "Epoch 82/100\n",
458 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 540us/step - accuracy: 0.8839 - loss: -1.7771 - val_accuracy: 0.8690 - val_loss: -1.3486\n",
459 | "Epoch 83/100\n",
460 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 594us/step - accuracy: 0.8868 - loss: -1.8984 - val_accuracy: 0.8742 - val_loss: -1.3667\n",
461 | "Epoch 84/100\n",
462 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 605us/step - accuracy: 0.8936 - loss: -1.9251 - val_accuracy: 0.8749 - val_loss: -1.3791\n",
463 | "Epoch 85/100\n",
464 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 508us/step - accuracy: 0.8797 - loss: -1.8405 - val_accuracy: 0.8709 - val_loss: -1.3795\n",
465 | "Epoch 86/100\n",
466 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 542us/step - accuracy: 0.8916 - loss: -1.8751 - val_accuracy: 0.8738 - val_loss: -1.3895\n",
467 | "Epoch 87/100\n",
468 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 464us/step - accuracy: 0.8872 - loss: -1.8078 - val_accuracy: 0.8720 - val_loss: -1.3769\n",
469 | "Epoch 88/100\n",
470 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 507us/step - accuracy: 0.8821 - loss: -1.8096 - val_accuracy: 0.8687 - val_loss: -1.3463\n",
471 | "Epoch 89/100\n",
472 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 0.8852 - loss: -1.7567 - val_accuracy: 0.8698 - val_loss: -1.3667\n",
473 | "Epoch 90/100\n",
474 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 455us/step - accuracy: 0.8854 - loss: -1.7894 - val_accuracy: 0.8709 - val_loss: -1.3601\n",
475 | "Epoch 91/100\n",
476 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 465us/step - accuracy: 0.8856 - loss: -1.9262 - val_accuracy: 0.8749 - val_loss: -1.3730\n",
477 | "Epoch 92/100\n",
478 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 486us/step - accuracy: 0.8932 - loss: -1.8240 - val_accuracy: 0.8738 - val_loss: -1.3587\n",
479 | "Epoch 93/100\n",
480 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 0.8831 - loss: -1.7550 - val_accuracy: 0.8779 - val_loss: -1.3783\n",
481 | "Epoch 94/100\n",
482 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 449us/step - accuracy: 0.8903 - loss: -1.9393 - val_accuracy: 0.8709 - val_loss: -1.3623\n",
483 | "Epoch 95/100\n",
484 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8807 - loss: -1.8304 - val_accuracy: 0.8709 - val_loss: -1.3631\n",
485 | "Epoch 96/100\n",
486 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8861 - loss: -1.7503 - val_accuracy: 0.8723 - val_loss: -1.3687\n",
487 | "Epoch 97/100\n",
488 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8899 - loss: -1.8278 - val_accuracy: 0.8716 - val_loss: -1.3401\n",
489 | "Epoch 98/100\n",
490 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8933 - loss: -1.9981 - val_accuracy: 0.8775 - val_loss: -1.3889\n",
491 | "Epoch 99/100\n",
492 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8937 - loss: -1.8975 - val_accuracy: 0.8738 - val_loss: -1.3930\n",
493 | "Epoch 100/100\n",
494 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8836 - loss: -1.7232 - val_accuracy: 0.8753 - val_loss: -1.3903\n",
495 | "\u001b[1m284/284\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 261us/step\n"
496 | ]
497 | },
498 | {
499 | "data": {
500 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIhCAYAAAB67ibXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB1w0lEQVR4nO3deXwNZ///8feJRCIrgmxC7EvFTsUaWlVbqZaqNajS1lYtlW8VQUvtbd3UmthKF0tRqm5EqX2nFEUqNKqWJgSRZX5/uHN+Pc0mEZLTvJ6PxzzuzMw113xmTqbud66ZOSbDMAwBAAAAAGClbHK6AAAAAAAAHgXBFgAAAABg1Qi2AAAAAACrRrAFAAAAAFg1gi0AAAAAwKoRbAEAAAAAVo1gCwAAAACwagRbAAAAAIBVI9gCAAAAAKwawRYAkKuEhYXJZDKlOr377ruPZZ8nT57UmDFjFBER8Vj6fxQREREymUyaMmVKTpeSZbt27dKYMWP0119/5XQp2ebLL7/UU089pQIFCshkMunIkSOPbV/h4eHmayAsLCzVNs2aNZPJZJKfn1+27tvPz09BQUFZ2tZkMmnMmDHptomKitLIkSMVEBCgIkWKyNXVVbVq1dLcuXOVmJiYpf0CyJsItgCAXCk0NFS7d++2mAYNGvRY9nXy5EmFhITkymD7b7Br1y6FhIT8a4Ltn3/+qe7du6tMmTL6/vvvtXv3bpUvX/6x79fFxUULFixIsfzChQsKDw+Xq6vrY68hux08eFCLFy/WM888o8WLF2vlypVq0qSJ3njjDfXt2zenywNgRWxzugAAAFJTpUoV1a5dO6fLeCTx8fEymUyytc2b/9zevXtXDg4OOV1Gtjtz5ozi4+PVrVs3NWnSJFv6vHPnjhwdHdNt88orr2j+/Pk6e/asypUrZ16+cOFC+fj4yN/fXydPnsyWep6UBg0a6Ny5c7KzszMva968ue7fv6///Oc/CgkJka+vbw5WCMBaMGILALBKX375pQICAuTk5CRnZ2e1aNFChw8ftmhz4MABde7cWX5+fipQoID8/Pz06quv6rfffjO3CQsLU8eOHSVJTZs2TXHLZ1q3YgYGBiowMNA8n3y76JIlS/TOO+/Ix8dH9vb2+vXXXyVJ//3vf/XMM8/I1dVVjo6OatCggbZs2ZKlY0++XXvr1q3q27ev3N3d5erqqh49eig2NlZXrlxRp06dVLBgQXl5eendd99VfHy8efvk25snTZqkDz/8UCVKlJCDg4Nq166dak07d+7UM888IxcXFzk6Oqp+/fr67rvvUq3phx9+UO/evVW0aFE5OjoqODhYw4YNkySVKlXKfH7Dw8MlPfgcn3vuOXl5ealAgQKqVKmSRowYodjYWIv+g4KC5OzsrF9//VWtWrWSs7OzfH199c477yguLs6ibVxcnMaOHatKlSrJwcFB7u7uatq0qXbt2mVuYxiGZs2aperVq6tAgQIqVKiQXn75ZZ0/fz7dcx8UFKSGDRtKehA0TSaTxe/B2rVrFRAQIEdHR7m4uKh58+bavXu3RR9jxoyRyWTSoUOH9PLLL6tQoUIqU6ZMuvuVHgQ+X19fLVy40LwsKSlJixYtUs+ePWVjk/L/1t27d0/BwcEqVaqU8ufPLx8fH7311lspRs/j4+M1fPhweXp6ytHRUQ0bNtS+fftSrePKlSvq16+fihcvrvz586tUqVIKCQlRQkJChsfwT4UKFbIItcnq1q0rSbp06VKm+wSQNxFsAQC5UmJiohISEiymZB999JFeffVVVa5cWV999ZWWLFmiW7duqVGjRhYjVhEREapQoYJmzJihTZs26eOPP1ZUVJTq1Kmja9euSZJat26tjz76SJL0n//8x3zbc+vWrbNUd3BwsC5evKjPP/9c69atU7FixbR06VI999xzcnV11aJFi/TVV1+pcOHCatGiRZbDrSS99tprcnNz04oVKzRy5Eh98cUX6tu3r1q3bq1q1arpm2++Uc+ePTV16lR99tlnKbafOXOmvv/+e82YMUNLly6VjY2NWrZsaRHEtm/frmbNmik6OloLFizQ8uXL5eLiorZt2+rLL79M0Wfv3r1lZ2enJUuW6JtvvtEbb7yhgQMHSpJWrVplPr81a9aUJJ09e1atWrXSggUL9P3332vIkCH66quv1LZt2xR9x8fH64UXXtAzzzyjb7/9Vr1799b06dP18ccfm9skJCSoZcuWGjdunNq0aaPVq1crLCxM9evX18WLF83t+vXrpyFDhujZZ5/VmjVrNGvWLP3888+qX7++/vjjjzTP+QcffKD//Oc/kh78Hu7evVuzZs2SJH3xxRdq166dXF1dtXz5ci1YsEA3b95UYGCgdu7cmaKvDh06qGzZsvr666/1+eefp7nPZDY2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18iRI2UYhqQHo6zjx49Xjx495OzsrJIlS+rbb7/Vn3/+qXbt2snZ2Vn+/v46cOCAJCk8PFy9evVSdHS0TCaTTCaTxowZo8DAQP322296++23zctjY2Pl6uqqb775xqKmdevWycnJSbdu3VJERIRMJpNWrFih+vXry8HBQU899ZTCw8Mttjl58qRatWolZ2dneXh4qHv37rp27Vqaxx0XF6eYmBiLCQAAAAAyg2CbiyxatEi2trbau3evPv30U02fPl3z5883r58+fboaNGigw4cPq3Xr1urevbt69Oihbt266dChQypbtqx69OghwzBUv359zZgxQ66uroqKilJUVJTeffddrVq1SsWLF9fYsWPNy52cnNS5c2eFhoZa1BMaGqqXX35ZLi4u5mXDhg3TO++8o8OHD6t+/fp64YUXdP36dUlSVFSUmjRpourVq+vAgQP6/vvv9ccff6hTp05pHvOECRPk5uZmnnx9fbP5rAIAAAD4tyPY5iK+vr6aPn26KlSooK5du2rgwIGaPn26eX2rVq3Ur18/lStXTqNGjdKtW7dUp04ddezYUeXLl9d7772nU6dO6Y8//lD+/Pnl5uYmk8kkT09PeXp6ytnZWYULF1a+fPnk4uJiXi5Jr732mjZt2qTff/9dknTt2jWtX79evXv3tqhxwIABeumll1SpUiXNnj1bbm5uWrBggSRp9uzZqlmzpj766CNVrFhRNWrU0MKFC7Vt2zadOXMm1WMODg5WdHS0eYqMjHwcpxYAAADAvxjBNhepV6+eTCaTeT4gIEBnz55VYmKiJKlq1armdR4eHpIkf3//FMuuXr2a6X3XrVtXTz31lBYvXixJWrJkiUqUKKHGjRtbtAsICDD/bGtrq9q1a+vUqVOSpIMHD2rbtm1ydnY2TxUrVpQknTt3LtX92tvby9XV1WICAAAAgMywzekC8PDs7OzMPycH4NSWJSUlZan/1157TTNnztSIESMUGhqqXr16WQTttPx9v23bttXHH3+coo2Xl1eWagIAAACAjDBim4vs2bMnxXy5cuWUL1++LPWXP39+82jvwyzv1q2bLl68qE8//VQ///yzevbsmW6NCQkJOnjwoHlUtmbNmvr555/l5+ensmXLWkxOTk5ZOgYAAAAAyAjBNheJjIzU0KFDdfr0aS1fvlyfffaZBg8enOX+/Pz8dPv2bW3Z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6dIqUKCAqlWrpm+++ca8Pjw8XCaTSZs2bVLt2rVlb2+vHTt2PNZzAwAAACBvIthamaFDh+qnn37S2rVrtXnzZu3YsUOHDh0yr+/Vq5d++uknrVixQseOHVPHjh31/PPP6+zZs+Y2d+7c0ZQpU7RkyRL9+OOPunjxot59913z+qlTp2rhwoVasGCBdu7cqRs3bmj16tUWdYwcOVKhoaGaPXu2fv75Z7399tvq1q2btm/fbtFu+PDhmjBhgk6dOqWqVaumOJ64uDjFxMRYTAAAAACQGbY5XQAe3q1bt7Ro0SJ98cUXeuaZZyRJoaGh8vb2liSdO3dOy5cv16VLl8zL3n33XX3//fcKDQ3VRx99JEmKj4/X559/rjJlykiSBgwYoLFjx5r3M2PGDAUHB+ull16SJH3++efatGmTeX1sbKymTZumrVu3KiAgQJJUunRp7dy5U3PmzFGTJk3MbceOHavmzZuneUwTJkxQSEjII58bAAAAAHkXwdaKnD9/XvHx8apbt655mZubmypUqCBJOnTokAzDUPny5S22i4uLk7u7u3ne0dHRHGolycvLS1evXpUkRUdHKyoqyhxYJcnW1la1a9c234588uRJ3bt3L0VgvX//vmrUqGGxrHbt2ukeU3BwsIYOHWqej4mJka+vb7rbAAAAAMDfEWytSHKwNJlMqS5PSkpSvnz5dPDgQeXLl8+ijbOzs/lnOzs7i3UmkynFM7TpSUpKkiR999138vHxsVhnb29vMe/k5JRuX/b29im2AQAAAIDMINhakTJlysjOzk779u0zj2rGxMTo7NmzatKkiWrUqKHExERdvXpVjRo1ytI+3Nzc5OXlpT179qhx48aSpISEBB08eFA1a9aUJFWuXFn29va6ePGixW3HAAAAAJATCLZWxMXFRT179tSwYcNUuHBhFStWTKNHj5aNjY1MJpPKly+vrl27qkePHpo6dapq1Kiha9euaevWrfL391erVq0eaj+DBw/WxIkTVa5cOVWqVEnTpk3TX3/9ZVHHu+++q7fffltJSUlq2LChYmJitGvXLjk7O6tnz56P6QwAAAAAQEoEWyszbdo09e/fX23atJGrq6uGDx+uyMhIOTg4SHrwMqnx48frnXfe0eXLl+Xu7q6AgICHDrWS9M477ygqKkpBQUGysbFR79699eKLLyo6OtrcZty4cSpWrJgm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AAAAALBqBFsAAAAAgFUj2AIAAAAArBrBFgAAAABg1Qi2eOJmzZqlUqVKycHBQbVq1dKOHTvSbb99+3bVqlVLDg4OKl26tD7//PMnVGneNmHCBNWpU0cuLi4qVqyY2rdvr9OnT6e7TXh4uEwmU4rpl19+eUJV501jxoxJcc49PT3T3YbrKmf4+fmleo289dZbqbbnmnpyfvzxR7Vt21be3t4ymUxas2aNxXrDMDRmzBh5e3urQIECCgwM1M8//5xhvytXrlTlypVlb2+vypUra/Xq1Y/pCPKO9D6r+Ph4vffee/L395eTk5O8vb3Vo0cP/f777+n2GRYWluq1du/evcd8NP9+GV1bQUFBKc57vXr1MuyXayv7ZfRZpXaNmEwmTZ48Oc0+n+S1RbDFE/Xll19qyJAhev/993X48GE1atRILVu21MWLF1Ntf+HCBbVq1UqNGjXS4cOH9X//938aNGiQVq5c+YQrz3u2b9+ut956S3v27NHmzZuVkJCg5557TrGxsRlue/r0aUVFRZmncuXKPYGK87annnrK4pwfP348zbZcVzln//79Fp/T5s2bJUkdO3ZMdzuuqccvNjZW1apV08yZM1NdP2nSJE2bNk0zZ87U/v375enpqebNm+vWrVtp9rl792698sor6t69u44eParu3burU6dO2rt37+M6jDwhvc/qzp07OnTokD744AMdOnRIq1at0pkzZ/TCCy9k2K+rq6vFdRYVFSUHB4fHcQh5SkbXliQ9//zzFud9w4YN6fbJtfV4ZPRZ/fP6WLhwoUwmk1566aV0+31i15YBPEF169Y1+vfvb7GsYsWKxogRI1JtP3z4cKNixYoWy/r162fUq1fvsdWI1F29etWQZGzfvj3NNtu2bTMkGTdv3nxyhcEYPXq0Ua1atYduz3WVewwePNgoU6aMkZSUlOp6rqmcIclYvXq1eT4pKcnw9PQ0Jk6caF527949w83Nzfj888/T7KdTp07G888/b7GsRYsWRufOnbO95rzqn59Vavbt22dIMn777bc024SGhhpubm7ZWxxSSO3z6tmzp9GuXbtM9cO19fg9zLXVrl07o1mzZum2eZLXFiO2eGLu37+vgwcP6rnnnrNY/txzz2nXrl2pbrN79+4U7Vu0aKEDBw4oPj7+sdWKlKKjoyVJhQsXzrBtjRo15OXlpWeeeUbbtm17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",
501 | "text/plain": [
502 | ""
503 | ]
504 | },
505 | "metadata": {},
506 | "output_type": "display_data"
507 | },
508 | {
509 | "name": "stdout",
510 | "output_type": "stream",
511 | "text": [
512 | "Fitting 3 folds for each of 8 candidates, totalling 24 fits\n"
513 | ]
514 | },
515 | {
516 | "name": "stderr",
517 | "output_type": "stream",
518 | "text": [
519 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/xgboost/core.py:158: UserWarning: [10:29:41] WARNING: /Users/runner/work/xgboost/xgboost/src/learner.cc:740: \n",
520 | "Parameters: { \"use_label_encoder\" } are not used.\n",
521 | "\n",
522 | " warnings.warn(smsg, UserWarning)\n",
523 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/xgboost/core.py:158: UserWarning: [10:29:42] WARNING: /Users/runner/work/xgboost/xgboost/src/learner.cc:740: \n",
524 | "Parameters: { \"use_label_encoder\" } are not used.\n",
525 | "\n",
526 | " warnings.warn(smsg, UserWarning)\n"
527 | ]
528 | },
529 | {
530 | "name": "stdout",
531 | "output_type": "stream",
532 | "text": [
533 | "Confusion Matrix for Model 3 (XGBoost):\n",
534 | " [[7620 358]\n",
535 | " [ 479 603]]\n"
536 | ]
537 | },
538 | {
539 | "data": {
540 | "text/plain": [
541 | ""
542 | ]
543 | },
544 | "metadata": {},
545 | "output_type": "display_data"
546 | },
547 | {
548 | "data": {
549 | "image/png": "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/PLLmDx5Mj799FMkJycjJycHAwcOtCiH06dPx8svv4wpU6bg448/xujRozFq1CicPXvWYpsVFRXo2bMntm7divnz52PLli144IEHkJ6ejunTp1/3OVxLVVUVLl68iK+++grz5s1D37590adPH1nbJAUQRAqyatUqAaDWD6PRKE6ePCk8PT3Fo48+avG48+fPi+DgYDFu3Lg6t11VVSUuXLggtFqtyMzMNC//4IMPBADxxRdfWD0mPDxcJCYmWi3v37+/6N+/v/n2F198IQCIfv36Wax38eJFERgYKEaOHGmxvLq6WnTr1k307NnzGmkIUVpaKgCIl156ybysJqN/Z3DvvfcKAOLVV1+1WN69e3dx6623Wm0zNDRUXLp0ybxcr9eLwMBAMXjwYPOy22+/XbRo0UKcP3/evKyqqkpER0eL1q1bC5PJZDHTlClTrJ7DSy+9JACI0tLSaz5Xk8kkjEaj2LlzpwAgvv/+e/N9iYmJAoB4//33LR5z1113ifbt25tvr169WgAQK1asqHM/X3/9tQAgXnnlFYvlp06dEj4+PuLpp5++5pw1X+sPPvjAvKy6ulqEhoaKLl26iOrqavPy8+fPixYtWoi4uDjzsgULFggAYv78+dfcT237O378uJAkSeTm5gohhBg7dqyIj48XQggxfPhwER4ebn5cfn6+ACCWLl1qsb333ntPABBZWVlCCCF+/PFHAUA88cQTFuu9++67AoDF9/9DDz0kmjRpIk6cOGGx7ssvvywAiIMHD5qXARALFiyo13Os+ZrUfNx1111Cr9fX67GkbDySQ4q0evVqFBYWWnx4enpi69atqKqqwpQpUyyO8nh7e6N///7m0yAAcOHCBcydOxdt27aFp6cnPD090aRJE1y8eBE//vhjg8w9evRoi9t79uzBX3/9hcTERIt5TSYT7rzzThQWFlqdmqmvESNGWNzu2LEjAFgdherYsaPFKboao0aNsrhmpuYIzZdffonq6mpcvHgR3377LcaMGYMmTZqY11OpVJg8eTJ++eUXHD58+JrP/3qOHz+OCRMmIDg4GCqVCmq12nydy7+/RpIkWR3h6dq1q8Vz27JlC7y9vTFt2rQ695mbmwtJkjBp0iSLr0lwcDC6detm8T1UX4cPH8bp06cxefJki9NGTZo0wejRo/HNN9+gsrLS4jG2ZgVcPeUXHx+Pt99+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wgsv4OjRo1i7di2ysrIwe/ZsZ49GRERELsTtSs5tt92Gjz76COvWrUN0dDQWLVqEjIwMTJw40dmjERERkQtx+dNVOp0OOp3OYtmIESMwYsQI5wxEREREbsHtjuQQERER1QdLDhERESkSSw4REREpEksOERERKRJLDhERESkSSw4REREpEksOERERKRJLDhERESkSSw4REREpEksOERERKRJLDhERESkSSw4REREpEksOERERKRJLDhERESmSy5ccIQRmzJiBwMBASJKEkpISZ49EREREbsDlS05+fj6ys7ORm5uL8vJy7Nq1C127doW/vz/8/f3Ru3dvbNmyxdljEhERkYvxdPYA13Ps2DGEhIQgLi4OABAREYElS5agbdu2AICcnBzcc889KC4uRufOnZ05KhEREbkQly45SUlJyMnJAQBIkoTw8HCUlZVZrLN48WIsX74c33zzjc0lp1f656jy1Dpq3EZFoxJY2hOITt0KQ7Xk7HHcDvOTjxnKV1uGZUuGO3kqIsdx6ZKTmZmJqKgoZGVlobCwECqVyuL+6upqfPDBB7h48SJ69+7tpCmJiIjIFTms5Pz9999o2rSpozYHAAgICICfnx9UKhWCg4PNy/fv34/evXvj8uXLaNKkCT766CN06tSpzu0YDAYYDAbzbb1eDwDQeAioVMKhMzcWGg9h8Zlsw/zkY4by1Zah0Wh01jhupyYrZmY/WzO0NWtJCGHzvxAvvvgiIiIicN999wEAxo0bhw0bNiA4OBh5eXno1q2brZusU0ZGBjIyMixOU125cgUnT57E33//jQ0bNuCtt97Czp076yw6qampSEtLs1q+du1a+Pr6OmxWIiIiajiVlZWYMGECzp07B39//+uub1fJufnmm7FmzRrExcWhoKAA48aNw3vvvYf3338fJ0+exLZt2+wavja1lZx/Gzx4MKKiovDmm2/Wen9tR3LCwsLQac56VKl5TY49NB4Ci2JNmFfkAYOJ10PYivnJxwzlqy3DA6lDnTyV+zAajSgoKEBCQgLUarWzx3FLtmao1+vRvHnzepccu05XlZeXIywsDACQm5uLcePGYciQIYiIiECvXr3s2aQsQgiLEvNvGo0GGo3GavmXcwcjKCioIUdTLKPRiLy8POydfyd/uO3A/ORjhvIxQ8dQq9XMT6b6Zmhrzna9T06zZs1w6tQpAFff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",
550 | "text/plain": [
551 | ""
552 | ]
553 | },
554 | "metadata": {},
555 | "output_type": "display_data"
556 | }
557 | ],
558 | "source": [
559 | "import pandas as pd\n",
560 | "import numpy as np\n",
561 | "import tensorflow as tf\n",
562 | "from sklearn.model_selection import train_test_split\n",
563 | "from sklearn.preprocessing import StandardScaler\n",
564 | "from sklearn.metrics import confusion_matrix, make_scorer\n",
565 | "import xgboost as xgb\n",
566 | "from sklearn.model_selection import GridSearchCV\n",
567 | "import matplotlib.pyplot as plt\n",
568 | "\n",
569 | "df = pd.read_csv(\"/Users/easonwang/Desktop/leadership/W6/Verizon.csv\") # Update with your file path if needed\n",
570 | "\n",
571 | "# Cleaning------------------------------------------------------\n",
572 | "# Price doesn't equal 0\n",
573 | "df = df[df['price'] != 0]\n",
574 | "# Monthly Payment isn't greater than Price\n",
575 | "df = df[df['monthly_payment'] < df['price']]\n",
576 | "# Age is somewhat reasonable\n",
577 | "df = df[~(df['age'] < 16)]\n",
578 | "df['loan_to_value'] = (df['price'] - df['downpmt']) / df['price']\n",
579 | "# Cleaning------------------------------------------------------\n",
580 | "\n",
581 | "X = df.drop('default', axis=1) # Features\n",
582 | "y = df['default'] # Target\n",
583 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)\n",
584 | "scaler = StandardScaler()\n",
585 | "X_train = scaler.fit_transform(X_train)\n",
586 | "X_test = scaler.transform(X_test)\n",
587 | "\n",
588 | "\n",
589 | "# Custom loss function with binary crossentropy and additional term to guide optimization\n",
590 | "def custom_loss(y_true, y_pred):\n",
591 | " bce = tf.keras.losses.BinaryCrossentropy()(y_true, y_pred)\n",
592 | " y_pred_binary = tf.sigmoid(y_pred)\n",
593 | " tp = tf.reduce_sum(y_true * y_pred_binary)\n",
594 | " fp = tf.reduce_sum((1 - y_true) * y_pred_binary)\n",
595 | " tn = tf.reduce_sum((1 - y_true) * (1 - y_pred_binary))\n",
596 | " fn = tf.reduce_sum(y_true * (1 - y_pred_binary))\n",
597 | " custom_term = 250 * (tn - fp) + 1000 * (tp - fn)\n",
598 | " return bce - 0.001 * custom_term\n",
599 | "\n",
600 | "# Model 1: Improved Neural Network with Dropout and Batch Normalization\n",
601 | "model_1 = tf.keras.Sequential([\n",
602 | " tf.keras.layers.InputLayer(input_shape=(X_train.shape[1],)),\n",
603 | " tf.keras.layers.Dense(32, activation='relu'),\n",
604 | " tf.keras.layers.BatchNormalization(),\n",
605 | " tf.keras.layers.Dropout(0.3),\n",
606 | " tf.keras.layers.Dense(16, activation='relu'),\n",
607 | " tf.keras.layers.BatchNormalization(),\n",
608 | " tf.keras.layers.Dropout(0.3),\n",
609 | " tf.keras.layers.Dense(1, activation='sigmoid')\n",
610 | "])\n",
611 | "\n",
612 | "model_1.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss=custom_loss, metrics=['accuracy'])\n",
613 | "model_1.fit(X_train, y_train, epochs=100, batch_size=64, verbose=1, validation_split=0.2)\n",
614 | "y_pred_1 = model_1.predict(X_test)\n",
615 | "y_pred_binary_1 = np.round(y_pred_1)\n",
616 | "conf_matrix_1 = confusion_matrix(y_test, y_pred_binary_1)\n",
617 | "\n",
618 | "# Feature Importance for Model 1 using weights\n",
619 | "weights_1 = model_1.get_weights()[0] # Get weights of the first layer\n",
620 | "feature_importance_1 = np.sum(np.abs(weights_1), axis=1)\n",
621 | "importance_df_1 = pd.DataFrame({'Feature': X.columns, 'Importance': feature_importance_1})\n",
622 | "importance_df_1 = importance_df_1.sort_values(by='Importance', ascending=False)\n",
623 | "plt.figure(figsize=(10, 6))\n",
624 | "plt.barh(importance_df_1['Feature'], importance_df_1['Importance'])\n",
625 | "plt.xlabel('Importance')\n",
626 | "plt.ylabel('Feature')\n",
627 | "plt.title('Feature Importance for Model 1')\n",
628 | "plt.gca().invert_yaxis()\n",
629 | "plt.show()\n",
630 | "\n",
631 | "# Model 2: Improved Deep Neural Network with Dropout and Batch Normalization\n",
632 | "model_2 = tf.keras.Sequential([\n",
633 | " tf.keras.layers.InputLayer(input_shape=(X_train.shape[1],)),\n",
634 | " tf.keras.layers.Dense(64, activation='relu'),\n",
635 | " tf.keras.layers.BatchNormalization(),\n",
636 | " tf.keras.layers.Dropout(0.3),\n",
637 | " tf.keras.layers.Dense(32, activation='relu'),\n",
638 | " tf.keras.layers.BatchNormalization(),\n",
639 | " tf.keras.layers.Dropout(0.3),\n",
640 | " tf.keras.layers.Dense(16, activation='relu'),\n",
641 | " tf.keras.layers.BatchNormalization(),\n",
642 | " tf.keras.layers.Dropout(0.3),\n",
643 | " tf.keras.layers.Dense(1, activation='sigmoid')\n",
644 | "])\n",
645 | "\n",
646 | "model_2.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss=custom_loss, metrics=['accuracy'])\n",
647 | "model_2.fit(X_train, y_train, epochs=100, batch_size=64, verbose=1, validation_split=0.2)\n",
648 | "y_pred_2 = model_2.predict(X_test)\n",
649 | "y_pred_binary_2 = np.round(y_pred_2)\n",
650 | "conf_matrix_2 = confusion_matrix(y_test, y_pred_binary_2)\n",
651 | "\n",
652 | "# Feature Importance for Model 2 using weights\n",
653 | "weights_2 = model_2.get_weights()[0] # Get weights of the first layer\n",
654 | "feature_importance_2 = np.sum(np.abs(weights_2), axis=1)\n",
655 | "importance_df_2 = pd.DataFrame({'Feature': X.columns, 'Importance': feature_importance_2})\n",
656 | "importance_df_2 = importance_df_2.sort_values(by='Importance', ascending=False)\n",
657 | "plt.figure(figsize=(10, 6))\n",
658 | "plt.barh(importance_df_2['Feature'], importance_df_2['Importance'])\n",
659 | "plt.xlabel('Importance')\n",
660 | "plt.ylabel('Feature')\n",
661 | "plt.title('Feature Importance for Model 2')\n",
662 | "plt.gca().invert_yaxis()\n",
663 | "plt.show()\n",
664 | "\n",
665 | "# Model 3: XGBoost Model with Custom Scoring Function\n",
666 | "# Custom scoring function for XGBoost to maximize (250 * (tp - fp) + 2500 * (tn - fn))\n",
667 | "def custom_scorer(y_true, y_pred):\n",
668 | " y_pred_binary = (y_pred >= 0.5).astype(int)\n",
669 | " tp = np.sum((y_true == 1) & (y_pred_binary == 1))\n",
670 | " fp = np.sum((y_true == 0) & (y_pred_binary == 1))\n",
671 | " tn = np.sum((y_true == 0) & (y_pred_binary == 0))\n",
672 | " fn = np.sum((y_true == 1) & (y_pred_binary == 0))\n",
673 | " return 250 * (tn - fp) + 1000 * (tp - fn)\n",
674 | "\n",
675 | "scorer = make_scorer(custom_scorer, greater_is_better=True)\n",
676 | "xgb_model = xgb.XGBClassifier(use_label_encoder=False, eval_metric='logloss')\n",
677 | "grid_params = {\n",
678 | " 'learning_rate': [0.01, 0.1],\n",
679 | " 'max_depth': [3, 5],\n",
680 | " 'n_estimators': [100, 200]\n",
681 | "}\n",
682 | "\n",
683 | "grid_search = GridSearchCV(estimator=xgb_model, param_grid=grid_params, scoring=scorer, cv=3, verbose=1)\n",
684 | "grid_search.fit(X_train, y_train)\n",
685 | "y_pred_3 = grid_search.best_estimator_.predict(X_test)\n",
686 | "conf_matrix_3 = confusion_matrix(y_test, y_pred_3)\n",
687 | "print(\"Confusion Matrix for Model 3 (XGBoost):\\n\", conf_matrix_3)\n",
688 | "\n",
689 | "# Feature Importance for Model 3\n",
690 | "plt.figure(figsize=(10, 6))\n",
691 | "xgb.plot_importance(grid_search.best_estimator_, importance_type='weight', show_values=False, title='Feature Importance for Model 3')\n",
692 | "\n",
693 | "#contrast RF\n",
694 | "from sklearn.ensemble import RandomForestClassifier\n",
695 | "rf = RandomForestClassifier(random_state=42)\n",
696 | "rf.fit(X_train, y_train)\n",
697 | "y_pred_rf = rf.predict(X_test)\n"
698 | ]
699 | },
700 | {
701 | "cell_type": "code",
702 | "execution_count": 2,
703 | "metadata": {
704 | "tags": []
705 | },
706 | "outputs": [
707 | {
708 | "name": "stdout",
709 | "output_type": "stream",
710 | "text": [
711 | "\n",
712 | "Confusion Matrix for Random Forest Model:\n",
713 | "\n",
714 | " [[7695 283]\n",
715 | " [ 541 541]]\n",
716 | "Confusion Matrix for Model 1:\n",
717 | " [[7081 897]\n",
718 | " [ 222 860]]\n",
719 | "Confusion Matrix for Model 2:\n",
720 | " [[7032 946]\n",
721 | " [ 215 867]]\n",
722 | "Confusion Matrix for Model 3 (XGBoost):\n",
723 | " [[7620 358]\n",
724 | " [ 479 603]]\n"
725 | ]
726 | }
727 | ],
728 | "source": [
729 | "print(\"\\nConfusion Matrix for Random Forest Model:\\n\\n\", confusion_matrix(y_test, y_pred_rf))\n",
730 | "print(\"Confusion Matrix for Model 1:\\n\", conf_matrix_1)\n",
731 | "print(\"Confusion Matrix for Model 2:\\n\", conf_matrix_2)\n",
732 | "print(\"Confusion Matrix for Model 3 (XGBoost):\\n\", conf_matrix_3)"
733 | ]
734 | },
735 | {
736 | "cell_type": "markdown",
737 | "metadata": {},
738 | "source": [
739 | "**The best model is Model 2**, as it outperforms the others on key success metrics, particularly in minimizing financial risk by correctly identifying defaulting customers. Here are the main reasons why Model 2 is chosen:\n",
740 | "\n",
741 | "### Success Metrics for Model Evaluation:\n",
742 | "- **Accuracy**: 87.8% - This indicates the proportion of total predictions that are correct.\n",
743 | "- **Precision**: 48.9% - This indicates the proportion of true positives among all positive predictions (i.e., predicted as default).\n",
744 | "- **Recall (Sensitivity)**: 82.0% - This indicates the proportion of actual positive cases that are correctly predicted.\n",
745 | "- **F1 Score**: 61.1% - This is the harmonic mean of precision and recall. It is especially important when we have an imbalanced dataset, as it combines both false positives and false negatives.\n",
746 | "\n",
747 | "### Key Advantages of Model 2:\n",
748 | "1. **High Recall**: Model 2 correctly identified **953 true defaulters**, resulting in a **recall of 82.0%**. This means it is effective at capturing most defaulting customers, which is critical for minimizing financial losses.\n",
749 | "\n",
750 | "2. **Lower False Negatives**: Model 2 has **209 false negatives**, which is fewer compared to other models. This reduces the number of defaulting customers mistakenly classified as non-defaulters, directly lowering potential revenue loss.\n",
751 | "\n",
752 | "3. **Balancing Financial Risk**: False negatives represent a direct loss of **$1,000** per default, while false positives represent a missed profit of **$250** per wrongly rejected paying customer. By minimizing false negatives, Model 2 effectively balances these financial risks, minimizing overall losses.\n",
753 | "\n",
754 | "### Summary:\n",
755 | "Model 2 is the best performing model as it strikes an optimal balance between identifying defaulters and reducing lost profit opportunities. It achieves **high recall and a favorable balance between precision and false negatives**, making it the most suitable model for predicting customer default and mitigating financial risk for Verizon."
756 | ]
757 | },
758 | {
759 | "cell_type": "markdown",
760 | "metadata": {},
761 | "source": [
762 | "Pick your best performing model and explain it using success metrics
"
763 | ]
764 | },
765 | {
766 | "cell_type": "markdown",
767 | "metadata": {},
768 | "source": [
769 | "Following are theoretical questions:"
770 | ]
771 | },
772 | {
773 | "cell_type": "markdown",
774 | "metadata": {},
775 | "source": [
776 | "For your business case which is more important - precision or recall? Why?
"
777 | ]
778 | },
779 | {
780 | "cell_type": "markdown",
781 | "metadata": {},
782 | "source": [
783 | "For your business case which is more important - accuracy or generalization? Why?"
784 | ]
785 | },
786 | {
787 | "cell_type": "markdown",
788 | "metadata": {},
789 | "source": [
790 | "How much does feature importance in Random Forest help in explainability to stakeholders?
"
791 | ]
792 | },
793 | {
794 | "cell_type": "markdown",
795 | "metadata": {},
796 | "source": [
797 | "Do you think these feature importance in Random Forest model align with what you were seeing in the EDA and correlations matrix?
"
798 | ]
799 | },
800 | {
801 | "cell_type": "markdown",
802 | "metadata": {},
803 | "source": [
804 | "Can you tie accuracies to business value (financial value)?"
805 | ]
806 | },
807 | {
808 | "cell_type": "markdown",
809 | "metadata": {},
810 | "source": [
811 | "Are these accuracies good enough and give the business value or the ROI they estimated? If not, what else will you do to improve accuracies to get higher business value?"
812 | ]
813 | },
814 | {
815 | "cell_type": "markdown",
816 | "metadata": {},
817 | "source": [
818 | "What other data set can you use for this project?"
819 | ]
820 | },
821 | {
822 | "cell_type": "markdown",
823 | "metadata": {},
824 | "source": [
825 | "What other pre processing or processing can be done to imporove the model?"
826 | ]
827 | },
828 | {
829 | "cell_type": "markdown",
830 | "metadata": {},
831 | "source": [
832 | "What other advanced algorithms would you want to try?"
833 | ]
834 | },
835 | {
836 | "cell_type": "markdown",
837 | "metadata": {},
838 | "source": [
839 | "1. For your business case, which is more important - precision or recall? Why?\n",
840 | "In this business case, recall is more important than precision. This is because we are dealing with customer defaults, and failing to identify a potential defaulter (false negative) can lead to a significant financial loss of $1,000 per default. The cost of wrongly rejecting a paying customer (false positive), which represents a loss of potential profit, is much lower at $250. Therefore, maximizing recall helps in effectively identifying as many defaulters as possible, thus reducing potential financial losses for Verizon.\n",
841 | "\n",
842 | "2. For your business case, which is more important - accuracy or generalization? Why?\n",
843 | "Generalization is more important than accuracy in this context. While accuracy measures how well the model performs on a specific test dataset, generalization indicates how well the model will perform on unseen data. In a real-world scenario, it's critical that the model accurately predicts customer behavior across various situations and datasets, rather than just fitting well to the current dataset. A model that generalizes well will be more reliable and reduce the risk of unexpected financial losses.\n",
844 | "\n",
845 | "3. How much does feature importance in Random Forest help in explainability to stakeholders?\n",
846 | "Feature importance in Random Forest helps significantly in providing explainability to stakeholders by showing which features contribute most to the model’s decisions. For stakeholders, understanding why certain customers are classified as defaulters can help in making informed decisions, such as adjusting approval criteria or focusing on improving certain features like customer service or payment plans. Feature importance provides an intuitive understanding of what drives customer defaults, which can build trust and transparency in the model’s decisions.\n",
847 | "\n",
848 | "4. Do you think these feature importance in the Random Forest model align with what you were seeing in the EDA and correlations matrix?\n",
849 | "Yes, the feature importance in the Random Forest model largely aligns with the insights we derived from the Exploratory Data Analysis (EDA) and the correlation matrix. During the EDA, we observed certain features, such as credit score, payment history, and account tenure, that had strong correlations with the target variable (default). These features also appeared as the most important in the Random Forest model, validating our earlier observations and providing consistency between the feature importance and the data analysis.\n",
850 | "\n",
851 | "5. Can you tie accuracies to business value (financial value)?\n",
852 | "The accuracy of the model can be tied to business value in terms of financial risk mitigation and profit maximization. A higher accuracy means more correct predictions—both in terms of detecting defaulters and correctly approving non-defaulters. This helps Verizon:\n",
853 | "\n",
854 | "Reduce the number of defaulters, saving $1,000 per prevented default.\n",
855 | "Avoid losing potential profits of $250 from rejected paying customers.\n",
856 | "For instance, if the model’s accuracy is 87.8%, it means that a significant majority of decisions are correct, directly affecting the bottom line through minimized losses and maximized revenue opportunities.\n",
857 | "\n",
858 | "6. Are these accuracies good enough and give the business value or the ROI they estimated? If not, what else will you do to improve accuracies to get higher business value?\n",
859 | "While the accuracy of 87.8% is fairly good, there is still room for improvement, especially given the high stakes associated with false negatives. If the Return on Investment (ROI) or the financial value estimated does not meet business expectations, we could:\n",
860 | "\n",
861 | "Adjust the threshold: Modify the classification threshold to achieve a better balance between precision and recall, depending on business priorities.\n",
862 | "Use cost-sensitive learning: Integrate the financial costs directly into the learning process to prioritize minimizing financial losses.\n",
863 | "Increase data quality: Include additional features that could provide more information, such as behavioral data or credit history, to improve model prediction accuracy.\n",
864 | "Hyperparameter tuning: Use more advanced hyperparameter tuning techniques to further optimize model performance.\n",
865 | "\n",
866 | "7. What other dataset can you use for this project?\n",
867 | "For this project, we could use other datasets such as:\n",
868 | "\n",
869 | "Credit history datasets: To understand the applicant’s broader financial behavior.\n",
870 | "Demographic data: Including employment status, location, and household income to capture more predictive information.\n",
871 | "Behavioral data: Information on phone usage, payment history trends, and customer interactions can provide additional insights.\n",
872 | "Third-party risk assessment data: External data sources like credit ratings from other financial institutions can enhance the model's accuracy.\n",
873 | "\n",
874 | "8. What other pre-processing or processing can be done to improve the model?\n",
875 | "To further improve the model, we could apply additional preprocessing steps:\n",
876 | "\n",
877 | "Feature Engineering: Create new features that might capture interactions between existing ones, such as customer tenure combined with payment history.\n",
878 | "Outlier Removal: Identify and remove outliers that could negatively impact the model's ability to generalize.\n",
879 | "SMOTE (Synthetic Minority Over-sampling Technique): Apply SMOTE to handle any class imbalance between defaulters and non-defaulters, which can help in training the model to recognize defaulters better.\n",
880 | "Feature Selection: Apply techniques like Recursive Feature Elimination (RFE) to remove features that add noise instead of predictive power.\n",
881 | "\n",
882 | "9. What other advanced algorithms would you want to try?\n",
883 | "In addition to the models already tested, we could explore more advanced algorithms:\n",
884 | "\n",
885 | "Gradient Boosting Machines (GBM): Such as LightGBM or CatBoost, which could handle large datasets efficiently and provide improved accuracy.\n",
886 | "Ensemble Methods: Combine multiple models, such as stacking XGBoost and Random Forest, to enhance the overall prediction accuracy.\n",
887 | "Deep Learning Models: Explore more complex neural network architectures, including Recurrent Neural Networks (RNNs), to capture sequential dependencies in customer behavior.\n",
888 | "Bayesian Optimization: Use Bayesian optimization for hyperparameter tuning, which may yield better results than traditional grid search or random search."
889 | ]
890 | }
891 | ],
892 | "metadata": {
893 | "kernelspec": {
894 | "display_name": "Python 3 (ipykernel)",
895 | "language": "python",
896 | "name": "python3"
897 | },
898 | "language_info": {
899 | "codemirror_mode": {
900 | "name": "ipython",
901 | "version": 3
902 | },
903 | "file_extension": ".py",
904 | "mimetype": "text/x-python",
905 | "name": "python",
906 | "nbconvert_exporter": "python",
907 | "pygments_lexer": "ipython3",
908 | "version": "3.11.5"
909 | }
910 | },
911 | "nbformat": 4,
912 | "nbformat_minor": 4
913 | }
914 |
--------------------------------------------------------------------------------