Files
FYSSTK-Project2/notebooks/01_simple-tests.ipynb
T
2025-11-05 08:43:18 +01:00

250 lines
70 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "2dd1fa3f",
"metadata": {},
"outputs": [],
"source": [
"from easynn.feedforward import (\n",
" Layer,\n",
" ReLU,\n",
" Regularization,\n",
" Linear,\n",
" FFNN,\n",
" MSELoss,\n",
" Softmax,\n",
" CrossEntropyLoss,\n",
")\n",
"from easynn.schedulers import AdamScheduler\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.datasets import make_regression, make_classification\n",
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import mean_squared_error, accuracy_score\n",
"import logging\n",
"\n",
"logging.basicConfig(level=logging.WARNING) # Set default logging level to WARNING"
]
},
{
"cell_type": "markdown",
"id": "73649f28",
"metadata": {},
"source": [
"# Regression Example"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "79c55021",
"metadata": {},
"outputs": [],
"source": [
"X, y = make_regression(n_samples=1000, n_features=5, n_informative=3, noise=0.1)\n",
"X = StandardScaler().fit_transform(X)\n",
"y = y.reshape(-1, 1)\n",
"y = StandardScaler().fit_transform(y)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8a88c060",
"metadata": {},
"outputs": [],
"source": [
"layers = [Layer(5, 5, ReLU()), Layer(5, 25, ReLU()), Layer(25, 1, Linear())]\n",
"network = FFNN(layers, AdamScheduler(learning_rate=0.001, epochs=1000), MSELoss())\n",
"network.fit(X_train, y_train)\n",
"predictions = network.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "515e1e02",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Training Loss Over Time')"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(network.scheduler.loss_history - min(network.scheduler.loss_history) + 1e-8)\n",
"plt.yscale(\"log\")\n",
"plt.xlabel(\"Epoch\")\n",
"plt.ylabel(\"Loss\")\n",
"plt.title(\"Training Loss Over Time\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "1dd8fefc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'True vs Predicted Values')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(y_test, predictions)\n",
"plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], \"k--\", lw=2)\n",
"plt.xlabel(\"True Values\")\n",
"plt.ylabel(\"Predictions\")\n",
"plt.title(\"True vs Predicted Values\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "d3052118",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0006306650385315765"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_squared_error(y_test, predictions)"
]
},
{
"cell_type": "markdown",
"id": "ea3bd93f",
"metadata": {},
"source": [
"# Classifier Example"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "fc9641f9",
"metadata": {},
"outputs": [],
"source": [
"X, y = make_classification(n_samples=1000, n_features=5, n_informative=3, n_classes=2)\n",
"X = StandardScaler().fit_transform(X)\n",
"y = y.reshape(-1, 1)\n",
"y = OneHotEncoder(sparse_output=False).fit_transform(y)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "00f52ecd",
"metadata": {},
"outputs": [],
"source": [
"layers = [Layer(5, 10, ReLU()), Layer(10, 5, ReLU()), Layer(5, 2, Softmax())]\n",
"network = FFNN(\n",
" layers, AdamScheduler(learning_rate=0.001, epochs=1000), CrossEntropyLoss()\n",
")\n",
"network.fit(X_train, y_train)\n",
"predictions = network.predict(X_test)\n",
"single_class_predictions = OneHotEncoder(sparse_output=False).fit_transform(\n",
" np.argmax(predictions, axis=1).reshape(-1, 1)\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "a3e32a73",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.944"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy_score(y_test, single_class_predictions)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "74212e01",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "project2",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}