Skip to content

Instantly share code, notes, and snippets.

@thecoder8890
Created June 15, 2025 13:51
Show Gist options
  • Save thecoder8890/a75eceace71f479df9a2c267457bb2ac to your computer and use it in GitHub Desktop.
Save thecoder8890/a75eceace71f479df9a2c267457bb2ac to your computer and use it in GitHub Desktop.
Feature_Engineering.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/thecoder8890/a75eceace71f479df9a2c267457bb2ac/feature_engineering.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"id": "6a7f89d8",
"metadata": {
"id": "6a7f89d8"
},
"source": [
"# Feature Engineering Walkthrough (Wine Dataset)\n",
"\n",
"This notebook demonstrates key feature engineering techniques.\n",
"\n",
"1. Feature Construction\n",
"2. Feature Transformation\n",
"3. Irrelevant Feature Removal\n",
"4. Define features and target\n",
"5. Train-test split\n",
"6. Missing value Imputation\n",
"7. Feature scaling\n",
"8. Supervised Feature Selection using Pearson Correlation\n",
"9. Dimensionality reduction using PCA\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "7ce7ad9c",
"metadata": {
"id": "7ce7ad9c"
},
"outputs": [],
"source": [
"from sklearn.datasets import load_wine\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.impute import SimpleImputer\n",
"from sklearn.decomposition import PCA\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n"
]
},
{
"cell_type": "code",
"source": [
"# Load dataset\n",
"wine = load_wine(as_frame=True)\n",
"print(f\"Description: {wine.DESCR}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "YSZ2qSnOsZ4b",
"outputId": "23c00a0a-3770-4b67-d147-453c9a0540de"
},
"id": "YSZ2qSnOsZ4b",
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Description: .. _wine_dataset:\n",
"\n",
"Wine recognition dataset\n",
"------------------------\n",
"\n",
"**Data Set Characteristics:**\n",
"\n",
":Number of Instances: 178\n",
":Number of Attributes: 13 numeric, predictive attributes and the class\n",
":Attribute Information:\n",
" - Alcohol\n",
" - Malic acid\n",
" - Ash\n",
" - Alcalinity of ash\n",
" - Magnesium\n",
" - Total phenols\n",
" - Flavanoids\n",
" - Nonflavanoid phenols\n",
" - Proanthocyanins\n",
" - Color intensity\n",
" - Hue\n",
" - OD280/OD315 of diluted wines\n",
" - Proline\n",
" - class:\n",
" - class_0\n",
" - class_1\n",
" - class_2\n",
"\n",
":Summary Statistics:\n",
"\n",
"============================= ==== ===== ======= =====\n",
" Min Max Mean SD\n",
"============================= ==== ===== ======= =====\n",
"Alcohol: 11.0 14.8 13.0 0.8\n",
"Malic Acid: 0.74 5.80 2.34 1.12\n",
"Ash: 1.36 3.23 2.36 0.27\n",
"Alcalinity of Ash: 10.6 30.0 19.5 3.3\n",
"Magnesium: 70.0 162.0 99.7 14.3\n",
"Total Phenols: 0.98 3.88 2.29 0.63\n",
"Flavanoids: 0.34 5.08 2.03 1.00\n",
"Nonflavanoid Phenols: 0.13 0.66 0.36 0.12\n",
"Proanthocyanins: 0.41 3.58 1.59 0.57\n",
"Colour Intensity: 1.3 13.0 5.1 2.3\n",
"Hue: 0.48 1.71 0.96 0.23\n",
"OD280/OD315 of diluted wines: 1.27 4.00 2.61 0.71\n",
"Proline: 278 1680 746 315\n",
"============================= ==== ===== ======= =====\n",
"\n",
":Missing Attribute Values: None\n",
":Class Distribution: class_0 (59), class_1 (71), class_2 (48)\n",
":Creator: R.A. Fisher\n",
":Donor: Michael Marshall (MARSHALL%[email protected])\n",
":Date: July, 1988\n",
"\n",
"This is a copy of UCI ML Wine recognition datasets.\n",
"https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data\n",
"\n",
"The data is the results of a chemical analysis of wines grown in the same\n",
"region in Italy by three different cultivators. There are thirteen different\n",
"measurements taken for different constituents found in the three types of\n",
"wine.\n",
"\n",
"Original Owners:\n",
"\n",
"Forina, M. et al, PARVUS -\n",
"An Extendible Package for Data Exploration, Classification and Correlation.\n",
"Institute of Pharmaceutical and Food Analysis and Technologies,\n",
"Via Brigata Salerno, 16147 Genoa, Italy.\n",
"\n",
"Citation:\n",
"\n",
"Lichman, M. (2013). UCI Machine Learning Repository\n",
"[https://archive.ics.uci.edu/ml]. Irvine, CA: University of California,\n",
"School of Information and Computer Science.\n",
"\n",
".. dropdown:: References\n",
"\n",
" (1) S. Aeberhard, D. Coomans and O. de Vel,\n",
" Comparison of Classifiers in High Dimensional Settings,\n",
" Tech. Rep. no. 92-02, (1992), Dept. of Computer Science and Dept. of\n",
" Mathematics and Statistics, James Cook University of North Queensland.\n",
" (Also submitted to Technometrics).\n",
"\n",
" The data was used with many others for comparing various\n",
" classifiers. The classes are separable, though only RDA\n",
" has achieved 100% correct classification.\n",
" (RDA : 100%, QDA 99.4%, LDA 98.9%, 1NN 96.1% (z-transformed data))\n",
" (All results using the leave-one-out technique)\n",
"\n",
" (2) S. Aeberhard, D. Coomans and O. de Vel,\n",
" \"THE CLASSIFICATION PERFORMANCE OF RDA\"\n",
" Tech. Rep. no. 92-01, (1992), Dept. of Computer Science and Dept. of\n",
" Mathematics and Statistics, James Cook University of North Queensland.\n",
" (Also submitted to Journal of Chemometrics).\n",
"\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"#create a dataframe using wine data\n",
"df = wine.frame\n",
"df.head()\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 226
},
"id": "W7eD5BsHUfeZ",
"outputId": "cb3df01d-257f-4d59-f27f-895b05a5c57c"
},
"id": "W7eD5BsHUfeZ",
"execution_count": 3,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" alcohol malic_acid ash alcalinity_of_ash magnesium total_phenols \\\n",
"0 14.23 1.71 2.43 15.6 127.0 2.80 \n",
"1 13.20 1.78 2.14 11.2 100.0 2.65 \n",
"2 13.16 2.36 2.67 18.6 101.0 2.80 \n",
"3 14.37 1.95 2.50 16.8 113.0 3.85 \n",
"4 13.24 2.59 2.87 21.0 118.0 2.80 \n",
"\n",
" flavanoids nonflavanoid_phenols proanthocyanins color_intensity hue \\\n",
"0 3.06 0.28 2.29 5.64 1.04 \n",
"1 2.76 0.26 1.28 4.38 1.05 \n",
"2 3.24 0.30 2.81 5.68 1.03 \n",
"3 3.49 0.24 2.18 7.80 0.86 \n",
"4 2.69 0.39 1.82 4.32 1.04 \n",
"\n",
" od280/od315_of_diluted_wines proline target \n",
"0 3.92 1065.0 0 \n",
"1 3.40 1050.0 0 \n",
"2 3.17 1185.0 0 \n",
"3 3.45 1480.0 0 \n",
"4 2.93 735.0 0 "
],
"text/html": [
"\n",
" <div id=\"df-87dc2711-7a41-4572-90ed-0ce983b6b707\" class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>alcohol</th>\n",
" <th>malic_acid</th>\n",
" <th>ash</th>\n",
" <th>alcalinity_of_ash</th>\n",
" <th>magnesium</th>\n",
" <th>total_phenols</th>\n",
" <th>flavanoids</th>\n",
" <th>nonflavanoid_phenols</th>\n",
" <th>proanthocyanins</th>\n",
" <th>color_intensity</th>\n",
" <th>hue</th>\n",
" <th>od280/od315_of_diluted_wines</th>\n",
" <th>proline</th>\n",
" <th>target</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>14.23</td>\n",
" <td>1.71</td>\n",
" <td>2.43</td>\n",
" <td>15.6</td>\n",
" <td>127.0</td>\n",
" <td>2.80</td>\n",
" <td>3.06</td>\n",
" <td>0.28</td>\n",
" <td>2.29</td>\n",
" <td>5.64</td>\n",
" <td>1.04</td>\n",
" <td>3.92</td>\n",
" <td>1065.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>13.20</td>\n",
" <td>1.78</td>\n",
" <td>2.14</td>\n",
" <td>11.2</td>\n",
" <td>100.0</td>\n",
" <td>2.65</td>\n",
" <td>2.76</td>\n",
" <td>0.26</td>\n",
" <td>1.28</td>\n",
" <td>4.38</td>\n",
" <td>1.05</td>\n",
" <td>3.40</td>\n",
" <td>1050.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>13.16</td>\n",
" <td>2.36</td>\n",
" <td>2.67</td>\n",
" <td>18.6</td>\n",
" <td>101.0</td>\n",
" <td>2.80</td>\n",
" <td>3.24</td>\n",
" <td>0.30</td>\n",
" <td>2.81</td>\n",
" <td>5.68</td>\n",
" <td>1.03</td>\n",
" <td>3.17</td>\n",
" <td>1185.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>14.37</td>\n",
" <td>1.95</td>\n",
" <td>2.50</td>\n",
" <td>16.8</td>\n",
" <td>113.0</td>\n",
" <td>3.85</td>\n",
" <td>3.49</td>\n",
" <td>0.24</td>\n",
" <td>2.18</td>\n",
" <td>7.80</td>\n",
" <td>0.86</td>\n",
" <td>3.45</td>\n",
" <td>1480.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>13.24</td>\n",
" <td>2.59</td>\n",
" <td>2.87</td>\n",
" <td>21.0</td>\n",
" <td>118.0</td>\n",
" <td>2.80</td>\n",
" <td>2.69</td>\n",
" <td>0.39</td>\n",
" <td>1.82</td>\n",
" <td>4.32</td>\n",
" <td>1.04</td>\n",
" <td>2.93</td>\n",
" <td>735.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-87dc2711-7a41-4572-90ed-0ce983b6b707')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-87dc2711-7a41-4572-90ed-0ce983b6b707 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-87dc2711-7a41-4572-90ed-0ce983b6b707');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
"\n",
"\n",
" <div id=\"df-33364618-9a7c-4e0a-8190-21e21a4ab1c9\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-33364618-9a7c-4e0a-8190-21e21a4ab1c9')\"\n",
" title=\"Suggest charts\"\n",
" style=\"display:none;\">\n",
"\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <g>\n",
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
" </g>\n",
"</svg>\n",
" </button>\n",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-33364618-9a7c-4e0a-8190-21e21a4ab1c9 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
" </div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "df",
"summary": "{\n \"name\": \"df\",\n \"rows\": 178,\n \"fields\": [\n {\n \"column\": \"alcohol\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.8118265380058577,\n \"min\": 11.03,\n \"max\": 14.83,\n \"num_unique_values\": 126,\n \"samples\": [\n 11.62,\n 13.64,\n 13.69\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"malic_acid\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.1171460976144627,\n \"min\": 0.74,\n \"max\": 5.8,\n \"num_unique_values\": 133,\n \"samples\": [\n 1.21,\n 2.83,\n 1.8\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ash\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.2743440090608148,\n \"min\": 1.36,\n \"max\": 3.23,\n \"num_unique_values\": 79,\n \"samples\": [\n 2.31,\n 2.43,\n 2.52\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"alcalinity_of_ash\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3.3395637671735052,\n \"min\": 10.6,\n \"max\": 30.0,\n \"num_unique_values\": 63,\n \"samples\": [\n 25.5,\n 28.5,\n 15.6\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"magnesium\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.282483515295668,\n \"min\": 70.0,\n \"max\": 162.0,\n \"num_unique_values\": 53,\n \"samples\": [\n 126.0,\n 85.0,\n 162.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_phenols\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.6258510488339891,\n \"min\": 0.98,\n \"max\": 3.88,\n \"num_unique_values\": 97,\n \"samples\": [\n 1.68,\n 2.11,\n 1.35\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"flavanoids\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9988586850169465,\n \"min\": 0.34,\n \"max\": 5.08,\n \"num_unique_values\": 132,\n \"samples\": [\n 3.18,\n 2.5,\n 3.17\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"nonflavanoid_phenols\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.12445334029667939,\n \"min\": 0.13,\n \"max\": 0.66,\n \"num_unique_values\": 39,\n \"samples\": [\n 0.58,\n 0.41,\n 0.39\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"proanthocyanins\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5723588626747611,\n \"min\": 0.41,\n \"max\": 3.58,\n \"num_unique_values\": 101,\n \"samples\": [\n 0.75,\n 1.77,\n 1.42\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"color_intensity\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2.318285871822413,\n \"min\": 1.28,\n \"max\": 13.0,\n \"num_unique_values\": 132,\n \"samples\": [\n 2.95,\n 3.3,\n 5.1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"hue\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22857156582982338,\n \"min\": 0.48,\n \"max\": 1.71,\n \"num_unique_values\": 78,\n \"samples\": [\n 1.22,\n 1.04,\n 1.45\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"od280/od315_of_diluted_wines\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.7099904287650505,\n \"min\": 1.27,\n \"max\": 4.0,\n \"num_unique_values\": 122,\n \"samples\": [\n 4.0,\n 1.82,\n 1.59\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"proline\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 314.9074742768489,\n \"min\": 278.0,\n \"max\": 1680.0,\n \"num_unique_values\": 121,\n \"samples\": [\n 1375.0,\n 1270.0,\n 735.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 2,\n \"num_unique_values\": 3,\n \"samples\": [\n 0,\n 1,\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 3
}
]
},
{
"cell_type": "code",
"source": [
"df.info()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "6GVegEIlWu7D",
"outputId": "fd36f0ef-d3b2-412a-aac7-20fc9df131e9"
},
"id": "6GVegEIlWu7D",
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 178 entries, 0 to 177\n",
"Data columns (total 14 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 alcohol 178 non-null float64\n",
" 1 malic_acid 178 non-null float64\n",
" 2 ash 178 non-null float64\n",
" 3 alcalinity_of_ash 178 non-null float64\n",
" 4 magnesium 178 non-null float64\n",
" 5 total_phenols 178 non-null float64\n",
" 6 flavanoids 178 non-null float64\n",
" 7 nonflavanoid_phenols 178 non-null float64\n",
" 8 proanthocyanins 178 non-null float64\n",
" 9 color_intensity 178 non-null float64\n",
" 10 hue 178 non-null float64\n",
" 11 od280/od315_of_diluted_wines 178 non-null float64\n",
" 12 proline 178 non-null float64\n",
" 13 target 178 non-null int64 \n",
"dtypes: float64(13), int64(1)\n",
"memory usage: 19.6 KB\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# 1. Feature Construction\n",
"df['ColorIntensity_Hue'] = df['color_intensity'] * df['hue']\n",
"df.info()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "TcArkw4-Uply",
"outputId": "8efbccfb-c4b4-4076-e5e8-dedaede006af"
},
"id": "TcArkw4-Uply",
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 178 entries, 0 to 177\n",
"Data columns (total 15 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 alcohol 178 non-null float64\n",
" 1 malic_acid 178 non-null float64\n",
" 2 ash 178 non-null float64\n",
" 3 alcalinity_of_ash 178 non-null float64\n",
" 4 magnesium 178 non-null float64\n",
" 5 total_phenols 178 non-null float64\n",
" 6 flavanoids 178 non-null float64\n",
" 7 nonflavanoid_phenols 178 non-null float64\n",
" 8 proanthocyanins 178 non-null float64\n",
" 9 color_intensity 178 non-null float64\n",
" 10 hue 178 non-null float64\n",
" 11 od280/od315_of_diluted_wines 178 non-null float64\n",
" 12 proline 178 non-null float64\n",
" 13 target 178 non-null int64 \n",
" 14 ColorIntensity_Hue 178 non-null float64\n",
"dtypes: float64(14), int64(1)\n",
"memory usage: 21.0 KB\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# 2. Feature Transformation\n",
"df['LOG_MalicAcid'] = np.log1p(df['malic_acid']) # calculates log(1+x)\n",
"df.head()\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 226
},
"id": "1ieYbgafVGBj",
"outputId": "ba9cc685-e619-486f-a726-960732f9fd42"
},
"id": "1ieYbgafVGBj",
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" alcohol malic_acid ash alcalinity_of_ash magnesium total_phenols \\\n",
"0 14.23 1.71 2.43 15.6 127.0 2.80 \n",
"1 13.20 1.78 2.14 11.2 100.0 2.65 \n",
"2 13.16 2.36 2.67 18.6 101.0 2.80 \n",
"3 14.37 1.95 2.50 16.8 113.0 3.85 \n",
"4 13.24 2.59 2.87 21.0 118.0 2.80 \n",
"\n",
" flavanoids nonflavanoid_phenols proanthocyanins color_intensity hue \\\n",
"0 3.06 0.28 2.29 5.64 1.04 \n",
"1 2.76 0.26 1.28 4.38 1.05 \n",
"2 3.24 0.30 2.81 5.68 1.03 \n",
"3 3.49 0.24 2.18 7.80 0.86 \n",
"4 2.69 0.39 1.82 4.32 1.04 \n",
"\n",
" od280/od315_of_diluted_wines proline target ColorIntensity_Hue \\\n",
"0 3.92 1065.0 0 5.8656 \n",
"1 3.40 1050.0 0 4.5990 \n",
"2 3.17 1185.0 0 5.8504 \n",
"3 3.45 1480.0 0 6.7080 \n",
"4 2.93 735.0 0 4.4928 \n",
"\n",
" LOG_MalicAcid \n",
"0 0.996949 \n",
"1 1.022451 \n",
"2 1.211941 \n",
"3 1.081805 \n",
"4 1.278152 "
],
"text/html": [
"\n",
" <div id=\"df-079adf5c-2c0d-4592-bc39-9af51d94a6b5\" class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>alcohol</th>\n",
" <th>malic_acid</th>\n",
" <th>ash</th>\n",
" <th>alcalinity_of_ash</th>\n",
" <th>magnesium</th>\n",
" <th>total_phenols</th>\n",
" <th>flavanoids</th>\n",
" <th>nonflavanoid_phenols</th>\n",
" <th>proanthocyanins</th>\n",
" <th>color_intensity</th>\n",
" <th>hue</th>\n",
" <th>od280/od315_of_diluted_wines</th>\n",
" <th>proline</th>\n",
" <th>target</th>\n",
" <th>ColorIntensity_Hue</th>\n",
" <th>LOG_MalicAcid</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>14.23</td>\n",
" <td>1.71</td>\n",
" <td>2.43</td>\n",
" <td>15.6</td>\n",
" <td>127.0</td>\n",
" <td>2.80</td>\n",
" <td>3.06</td>\n",
" <td>0.28</td>\n",
" <td>2.29</td>\n",
" <td>5.64</td>\n",
" <td>1.04</td>\n",
" <td>3.92</td>\n",
" <td>1065.0</td>\n",
" <td>0</td>\n",
" <td>5.8656</td>\n",
" <td>0.996949</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>13.20</td>\n",
" <td>1.78</td>\n",
" <td>2.14</td>\n",
" <td>11.2</td>\n",
" <td>100.0</td>\n",
" <td>2.65</td>\n",
" <td>2.76</td>\n",
" <td>0.26</td>\n",
" <td>1.28</td>\n",
" <td>4.38</td>\n",
" <td>1.05</td>\n",
" <td>3.40</td>\n",
" <td>1050.0</td>\n",
" <td>0</td>\n",
" <td>4.5990</td>\n",
" <td>1.022451</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>13.16</td>\n",
" <td>2.36</td>\n",
" <td>2.67</td>\n",
" <td>18.6</td>\n",
" <td>101.0</td>\n",
" <td>2.80</td>\n",
" <td>3.24</td>\n",
" <td>0.30</td>\n",
" <td>2.81</td>\n",
" <td>5.68</td>\n",
" <td>1.03</td>\n",
" <td>3.17</td>\n",
" <td>1185.0</td>\n",
" <td>0</td>\n",
" <td>5.8504</td>\n",
" <td>1.211941</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>14.37</td>\n",
" <td>1.95</td>\n",
" <td>2.50</td>\n",
" <td>16.8</td>\n",
" <td>113.0</td>\n",
" <td>3.85</td>\n",
" <td>3.49</td>\n",
" <td>0.24</td>\n",
" <td>2.18</td>\n",
" <td>7.80</td>\n",
" <td>0.86</td>\n",
" <td>3.45</td>\n",
" <td>1480.0</td>\n",
" <td>0</td>\n",
" <td>6.7080</td>\n",
" <td>1.081805</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>13.24</td>\n",
" <td>2.59</td>\n",
" <td>2.87</td>\n",
" <td>21.0</td>\n",
" <td>118.0</td>\n",
" <td>2.80</td>\n",
" <td>2.69</td>\n",
" <td>0.39</td>\n",
" <td>1.82</td>\n",
" <td>4.32</td>\n",
" <td>1.04</td>\n",
" <td>2.93</td>\n",
" <td>735.0</td>\n",
" <td>0</td>\n",
" <td>4.4928</td>\n",
" <td>1.278152</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-079adf5c-2c0d-4592-bc39-9af51d94a6b5')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-079adf5c-2c0d-4592-bc39-9af51d94a6b5 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-079adf5c-2c0d-4592-bc39-9af51d94a6b5');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
"\n",
"\n",
" <div id=\"df-c85b8d16-4850-452d-9bab-63d650b01574\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-c85b8d16-4850-452d-9bab-63d650b01574')\"\n",
" title=\"Suggest charts\"\n",
" style=\"display:none;\">\n",
"\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <g>\n",
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
" </g>\n",
"</svg>\n",
" </button>\n",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-c85b8d16-4850-452d-9bab-63d650b01574 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
" </div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "df",
"summary": "{\n \"name\": \"df\",\n \"rows\": 178,\n \"fields\": [\n {\n \"column\": \"alcohol\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.8118265380058577,\n \"min\": 11.03,\n \"max\": 14.83,\n \"num_unique_values\": 126,\n \"samples\": [\n 11.62,\n 13.64,\n 13.69\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"malic_acid\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.1171460976144627,\n \"min\": 0.74,\n \"max\": 5.8,\n \"num_unique_values\": 133,\n \"samples\": [\n 1.21,\n 2.83,\n 1.8\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ash\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.2743440090608148,\n \"min\": 1.36,\n \"max\": 3.23,\n \"num_unique_values\": 79,\n \"samples\": [\n 2.31,\n 2.43,\n 2.52\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"alcalinity_of_ash\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3.3395637671735052,\n \"min\": 10.6,\n \"max\": 30.0,\n \"num_unique_values\": 63,\n \"samples\": [\n 25.5,\n 28.5,\n 15.6\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"magnesium\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.282483515295668,\n \"min\": 70.0,\n \"max\": 162.0,\n \"num_unique_values\": 53,\n \"samples\": [\n 126.0,\n 85.0,\n 162.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_phenols\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.6258510488339891,\n \"min\": 0.98,\n \"max\": 3.88,\n \"num_unique_values\": 97,\n \"samples\": [\n 1.68,\n 2.11,\n 1.35\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"flavanoids\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.9988586850169465,\n \"min\": 0.34,\n \"max\": 5.08,\n \"num_unique_values\": 132,\n \"samples\": [\n 3.18,\n 2.5,\n 3.17\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"nonflavanoid_phenols\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.12445334029667939,\n \"min\": 0.13,\n \"max\": 0.66,\n \"num_unique_values\": 39,\n \"samples\": [\n 0.58,\n 0.41,\n 0.39\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"proanthocyanins\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5723588626747611,\n \"min\": 0.41,\n \"max\": 3.58,\n \"num_unique_values\": 101,\n \"samples\": [\n 0.75,\n 1.77,\n 1.42\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"color_intensity\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 2.318285871822413,\n \"min\": 1.28,\n \"max\": 13.0,\n \"num_unique_values\": 132,\n \"samples\": [\n 2.95,\n 3.3,\n 5.1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"hue\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22857156582982338,\n \"min\": 0.48,\n \"max\": 1.71,\n \"num_unique_values\": 78,\n \"samples\": [\n 1.22,\n 1.04,\n 1.45\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"od280/od315_of_diluted_wines\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.7099904287650505,\n \"min\": 1.27,\n \"max\": 4.0,\n \"num_unique_values\": 122,\n \"samples\": [\n 4.0,\n 1.82,\n 1.59\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"proline\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 314.9074742768489,\n \"min\": 278.0,\n \"max\": 1680.0,\n \"num_unique_values\": 121,\n \"samples\": [\n 1375.0,\n 1270.0,\n 735.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 2,\n \"num_unique_values\": 3,\n \"samples\": [\n 0,\n 1,\n 2\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"ColorIntensity_Hue\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1.7323212531602634,\n \"min\": 1.1904000000000001,\n \"max\": 10.700999999999999,\n \"num_unique_values\": 169,\n \"samples\": [\n 2.842,\n 6.7829999999999995,\n 2.7186\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"LOG_MalicAcid\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.30958204116784466,\n \"min\": 0.5538851132264376,\n \"max\": 1.916922612182061,\n \"num_unique_values\": 133,\n \"samples\": [\n 0.7929925155296614,\n 1.3428648031925547,\n 1.0296194171811583\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 6
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "R8UhqZS51U1m"
},
"id": "R8UhqZS51U1m",
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# 3. Irrelevant Feature Removal\n",
"df = df.drop(columns=['nonflavanoid_phenols'])\n",
"df.info()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vjEus07gVq2a",
"outputId": "445bcd42-cb10-45a6-c720-5576247f26a7"
},
"id": "vjEus07gVq2a",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 178 entries, 0 to 177\n",
"Data columns (total 15 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 alcohol 178 non-null float64\n",
" 1 malic_acid 178 non-null float64\n",
" 2 ash 178 non-null float64\n",
" 3 alcalinity_of_ash 178 non-null float64\n",
" 4 magnesium 178 non-null float64\n",
" 5 total_phenols 178 non-null float64\n",
" 6 flavanoids 178 non-null float64\n",
" 7 proanthocyanins 178 non-null float64\n",
" 8 color_intensity 178 non-null float64\n",
" 9 hue 178 non-null float64\n",
" 10 od280/od315_of_diluted_wines 178 non-null float64\n",
" 11 proline 178 non-null float64\n",
" 12 target 178 non-null int64 \n",
" 13 ColorIntensity_Hue 178 non-null float64\n",
" 14 LOG_MalicAcid 178 non-null float64\n",
"dtypes: float64(14), int64(1)\n",
"memory usage: 21.0 KB\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b1ff04fc",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "b1ff04fc",
"outputId": "38ea8049-4583-43a8-bc60-ed359fd8d741"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"(178, 14)\n",
"(178,)\n"
]
}
],
"source": [
"# 4. Define features and target\n",
"X = df.drop(columns='target')\n",
"y = df['target']\n",
"print(X.shape)\n",
"print(y.shape)\n"
]
},
{
"cell_type": "code",
"source": [
"# 5. Train-test split\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"print(X_train.shape)\n",
"#print(X_test.shape)\n",
"#print(y_train.shape)\n",
"#print(y_test.shape)"
],
"metadata": {
"id": "cmwNHS3YWdMC",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "dc4a42ac-bc0e-4455-9358-1525d05c3730"
},
"id": "cmwNHS3YWdMC",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"(142, 14)\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# **Missing Value Imputation**"
],
"metadata": {
"id": "cRK3tHkRwWeJ"
},
"id": "cRK3tHkRwWeJ"
},
{
"cell_type": "code",
"source": [
"# 6. Imputation\n",
"imputer = SimpleImputer(strategy='mean')\n",
"X_train_imputed = imputer.fit_transform(X_train)\n",
"X_test_imputed = imputer.transform(X_test)\n"
],
"metadata": {
"id": "u_XR2wh-Wfph"
},
"id": "u_XR2wh-Wfph",
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# **Feature Scaling**"
],
"metadata": {
"id": "HGRLk6O-wRMA"
},
"id": "HGRLk6O-wRMA"
},
{
"cell_type": "code",
"source": [
"# 7. Scaling\n",
"scaler = StandardScaler()\n",
"X_train_scaled = scaler.fit_transform(X_train_imputed)\n",
"X_test_scaled = scaler.transform(X_test_imputed)\n",
"print(X_train_scaled)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "91VlhXIJW8we",
"outputId": "76c56010-7548-40aa-d7b4-9739b9313bad"
},
"id": "91VlhXIJW8we",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[ 1.66529275 -0.60840587 1.21896194 ... -0.24860607 1.78904812\n",
" -0.57760139]\n",
" [-0.54952506 2.7515415 1.00331502 ... -0.72992237 -0.26539174\n",
" 2.27998112]\n",
" [-0.74531007 -1.14354109 -0.93750727 ... -0.24860607 0.09460074\n",
" -1.40915497]\n",
" ...\n",
" [ 1.714239 -0.44172441 0.06884503 ... 2.69572196 2.77592406\n",
" -0.35706529]\n",
" [-0.35374006 -0.7399965 -0.36244882 ... -0.79631083 -0.99282482\n",
" -0.7630497 ]\n",
" [-0.78201975 0.06709269 0.35637426 ... -0.98551793 -1.41985039\n",
" 0.23556513]]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# **Feature selection**"
],
"metadata": {
"id": "TK86eZsRv1IP"
},
"id": "TK86eZsRv1IP"
},
{
"cell_type": "code",
"source": [
"# 8. Supervised Feature Selection using Pearson Correlation with the Target\n",
"# Step 1: Compute absolute Pearson correlation between each feature and the target\n",
"# This uses np.corrcoef to get the correlation matrix and extracts the last row (target correlation)\n",
"correlations = np.abs(np.corrcoef(X_train_scaled.T, y_train)[-1, :-1])\n",
"\n",
"# Step 2: Get indices of the top 8 features with the highest absolute correlation to the target\n",
"top_k_indices = np.argsort(correlations)[-8:]\n",
"\n",
"# Step 3: Retrieve the names of the selected features and their corresponding correlation values\n",
"selected_feature_names = np.array(X.columns)[top_k_indices]\n",
"selected_feature_corrs = correlations[top_k_indices]\n",
"\n",
"# Step 4: Create a DataFrame for easy display and interpretation\n",
"corr_df = pd.DataFrame({\n",
" 'Feature': selected_feature_names,\n",
" 'Correlation': selected_feature_corrs\n",
"})\n",
"\n",
"# Step 5: Print the top correlated features and their correlation values\n",
"print(\"Top 8 features based on Pearson correlation with target:\\n\")\n",
"print(corr_df.sort_values(by=\"Correlation\", ascending=False).reset_index(drop=True))\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "X3VyqrVioUqy",
"outputId": "993fe698-99bc-4e41-e761-0bc7ab64a5e1"
},
"id": "X3VyqrVioUqy",
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Top 8 features based on Pearson correlation with target:\n",
"\n",
" Feature Correlation\n",
"0 flavanoids 0.842202\n",
"1 od280/od315_of_diluted_wines 0.797794\n",
"2 total_phenols 0.690035\n",
"3 proline 0.623131\n",
"4 hue 0.610428\n",
"5 alcalinity_of_ash 0.519728\n",
"6 proanthocyanins 0.490675\n",
"7 malic_acid 0.457122\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "360279e9",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 807
},
"outputId": "3c2fd4a4-724d-401c-a0b5-b29c536c2b25"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 800x800 with 2 Axes>"
],
"image/png": "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4PLlyyrnHj9+jCZNmsiUGRGJiQMJIiIiEs2WLVvg4+ODu3fvIjw8HNWrV8fvv/+uPP/69WucOHFCxgyJSCzs2kRERESi+emnn7BkyRKMGDECALBjxw70798fL1++hL+/v8zZEZGYOJAgIiIi0SQmJqJdu3bKj7t27QoLCwv4+PjgzZs36Nixo4zZEZGYOJAgIiIi0RgbG+PevXuwtbVVHmvcuDH++usvtG3bFjdv3pQxOyISE2skiIiISDS1atXCwYMH8xxv2LAh9u/fj2XLlqk/KSKSBAcSREREJJrRo0dDX18/33ONGjXC/v370bdvXzVnRURS4IZ0RERERERUaKyRICIiIlE8ffq0wM81NjaWMBMiUgfOSBAREZEotLS0oFAoCvTc7OxsibMhIqlxRoKIiIhEcezYMeW/r1+/jgkTJsDX1xdeXl4AgPDwcGzcuBHz5s2TK0UiEhFnJIiIiEh0TZs2xYABA9CjRw+V41u2bMGaNWtw/PhxeRIjItFwIEFERESiK168OGJjY+Hg4KByPCEhAe7u7sjMzJQpMyISC9u/EhERkeisrKzw66+/5jm+du1aWFlZyZAREYmNMxJEREQkugMHDqBz586wt7dH7dq1AQARERFITEzErl270Lp1a5kzJKLPxYEEERERSeLGjRtYvXo14uPjAQBOTk4YPHgwZySINAS7NhEREZEkjIyMYGZmBjMzMwBAqVKluH8EkQbhjAQRERGJ7vz582jZsiUMDAxQq1YtAMC5c+fw4sULBAcHw8PDQ+YMiehzcSBBREREoqtfvz7s7e3x66+/Qkfn7QKIrKwsDBgwAElJSTh58qTMGRLR5+JAgoiIiERnYGCA6OhoVKlSReX4pUuX4OnpyfavRBqA7V+JiIhIdMbGxkhNTc1z/MaNGzAyMpIhIyISGwcSREREJLpu3brB398f27dvx40bN3Djxg1s27Yt392uiahoYtcmIiIiEt2iRYugUCjQt29fZGVlAQB0dXUxZMgQzJ8/X+bsiEgMrJEgIiIiyWRmZuLatWsAgEqVKqF48eIyZ0REYuFAgoiIiIiICo01EkREREREVGgcSBARERERUaFxIEFERERERIXGgQQRERERERUaBxJERERERFRoHEgQEREREVGhcSBBRERERESFxoEEEREREREV2v8DW81I1XBjwuUAAAAASUVORK5CYII=\n"
},
"metadata": {}
}
],
"source": [
"# Correlation heatmap\n",
"df_scaled = pd.DataFrame(X_train_scaled, columns=X.columns)\n",
"df_scaled['target'] = y_train.reset_index(drop=True)\n",
"corr_matrix = df_scaled.corr()\n",
"\n",
"# Plot\n",
"plt.figure(figsize=(8, 8))\n",
"sns.heatmap(corr_matrix)\n",
"plt.title(\"Correlation Heatmap \")\n",
"plt.tight_layout()\n",
"plt.show()\n"
],
"id": "360279e9"
},
{
"cell_type": "markdown",
"source": [
"# **PCA Features**\n",
"PCA transforms the original features into a new set of features called principal components, which are:\n",
"\n",
"Linear combinations of the original features\n",
"\n",
"Orthogonal (uncorrelated) to each other\n",
"\n",
"Ranked by the amount of variance they capture\n",
"\n",
"PC1 = a₁·feature₁ + a₂·feature₂ + ... + aₙ·featureₙ\n",
"\n",
"PC2 = b₁·feature₁ + b₂·feature₂ + ... + bₙ·featureₙ\n",
"\n"
],
"metadata": {
"id": "uecH8OQ_uCZn"
},
"id": "uecH8OQ_uCZn"
},
{
"cell_type": "code",
"source": [
"# 9. Principal Component Analysis (PCA) — a linear dimensionality reduction technique.\n",
"# Select those features from the scaled data\n",
"X_train_selected = X_train_scaled[:, top_k_indices]\n",
"X_test_selected = X_test_scaled[:, top_k_indices]\n",
"\n",
"pca = PCA(n_components=2)\n",
"X_train_pca = pca.fit_transform(X_train_selected)\n",
"X_test_pca = pca.transform(X_test_selected)"
],
"metadata": {
"id": "jKX8Tki4XjtE"
},
"id": "jKX8Tki4XjtE",
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 607
},
"id": "44fada6c",
"outputId": "90cbcafb-c955-4db3-92af-4def9c26c045"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 600x600 with 1 Axes>"
],
"image/png": "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FTqdTtHSBEuWLBGSJDkuz79XbpfrnzlzRvTt21cUL15caLVaUapUKfH444+LxYsXO9q8++67okGDBiI4OFgYjUZRtWpV8d5772Wp12aziREjRojw8HAhSVKeSxMkJSWJTz/9VLRr106ULl1aaLVaERAQIBo3biy++uqrLMuEuKrPevbsmefK6uQ5khAemu1JVMj16dMHO3bsyHL1HxHdYbfbUb16dfTo0SPH09dF2bVr11CuXDn8+OOPHHHyQpzjROQmV69e5RUxRLlQq9WYNGkSZs6cmeUUIgGffPIJYmJiGJq8FEeciFzs8OHD+PXXX/Huu+/itddew3vvvefpkoiIyEU4OZzIxZYsWYLp06fj6aefxptvvunpcoiIyIU44kRERESkEOc4ERERESnE4ERERESkUJGa4yTLMq5cuYKAgADeOJGIiIgA3FlpPzk5GSVLlsz3RvFFKjhduXLlgW/KSURERIXTxYsX873xdJEKTgEBAQDudExgYKCHq7nDarVi9erVjttv0H/YNzljv+SOfZMz9kvO2C+5K2p9k5SUhKioKEdOyEuRCk6Zp+cCAwO9KjiZTCYEBgYWiTenM9g3OWO/5I59kzP2S87YL7krqn2jZBoPJ4cTERERKcTgRERERKQQgxMRERGRQkVqjhMREZG3sNvtsFqtni4jR1arFRqNBhkZGbDb7Z4u54FptVqo1WqXPBeDExERUQESQuDatWtISEjwdCm5EkKgePHiuHjxYqFZ9zA4OBjFixd/4NfD4ERERFSAMkNTREQETCaTVwYTWZaRkpICf3//fBeE9HZCCKSlpeHGjRsAgBIlSjzQ8zE4ERERFRC73e4ITcWKFfN0ObmSZRkWiwUGg8HngxMAGI1GAMCNGzcQERHxQKftfL83iIiIfETmnCaTyeThSoqezD5/0HllDE5EREQFzBtPzxV2rupzBiciIiIihRiciIiIqEDMmzcPwcHBni7jgTA4EREReZgkSXl+TZgwwaO1/frrr4rabtiwAR06dECxYsVgMplQvXp1vPrqq7h8+bJ7iyxADE5EREQedvXqVcfXJ598gsDAwCzbRo8e7dTzWSwWN1Wauy+++AKtW7dG8eLF8csvv+Dvv//G7NmzkZiYiI8//rjA63EXBiciIiIPK168uOMrKCgIkiQ5vk9NTcUzzzyDyMhI+Pv7o379+li7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YuPGjRg5cmSWU435KVu2LDZv3ozLly/j5s2buba7du0aDh48iNOnTwMAjhw5goMHDzouFCAqqhiciEixYsWKYf369UhJSUGLFi0QGxuLr776Ks85T3379kV6ejoaNGiAYcOG4aWXXnIsuhkeHo558+bh559/RvXq1fH+++/jo48+crquJ554Atu3b4dWq0Xv3r1RtWpV9OrVC4mJiY6r5kqVKoU///wTu3fvRu3atTF48GA8//zz+N///nd/nXGP999/Hy+99BJiY2Nx7do1/P777445ZXXr1sWiRYvw448/oub/t3f3tg1CUQBGb1oKj0DjCskFbwFkVmAFizUomMJzMAFiEjagpUvqpLqWoiSKzhngvfbT+73dYpqmmOf5pduDVVXFtm1R13UMwxBN08Tj8YjzPONyuaTHmec59n2P6/X6aYvvq+fzGaWUGMcxIiK6rotSSizLkp4L/qO39+zJSoAX3e/3aNv2W791+WvWdY2+7+M4jl95/BP4WVacAACShBMAQJKtOgCAJCtOAABJwgkAIEk4AQAkCScAgCThBACQJJwAAJKEEwBAknACAEgSTgAASR8j9pNzvuiWZgAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"# PCA Visualization\n",
"pca_df = pd.DataFrame(X_test_pca, columns=['PC1', 'PC2'])\n",
"pca_df['target'] = y_test.reset_index(drop=True)\n",
"\n",
"plt.figure(figsize=(6, 6))\n",
"sns.scatterplot(data=pca_df, x='PC1', y='PC2', hue='target', palette='Set1', s=80)\n",
"plt.title(\"PCA Projection of Wine Dataset (Test Set)\")\n",
"plt.xlabel(\"Principal Component 1\")\n",
"plt.ylabel(\"Principal Component 2\")\n",
"plt.grid(True)\n",
"plt.legend(title=\"Target Class\")\n",
"plt.tight_layout()\n",
"plt.show()\n"
],
"id": "44fada6c"
},
{
"cell_type": "markdown",
"source": [
"Principal Component 1 (PC1): The direction (vector) in feature space along which the most variance in the data is explained.\n",
"\n",
"Principal Component 2 (PC2): The orthogonal direction to PC1 that explains the second most variance.\n",
"\n",
"\n",
"It Visualizes high-dimensional feature space compactly.\n",
"\n",
"It assesses separability of classes (i.e., how well a classifier might perform). It loses interpretability because components are mixed. so useful for exploratory data analysis before training"
],
"metadata": {
"id": "bekCd9mopRhf"
},
"id": "bekCd9mopRhf"
},
{
"cell_type": "code",
"source": [
"components = pca.components_\n",
"\n",
"# Create contributions table\n",
"pca_contributions = pd.DataFrame(components.T,\n",
" index=selected_feature_names,\n",
" columns=['PC1', 'PC2'])\n",
"\n",
"# Sort contributions by absolute value\n",
"top_pc1 = pca_contributions['PC1'].abs().sort_values(ascending=False)\n",
"top_pc2 = pca_contributions['PC2'].abs().sort_values(ascending=False)\n",
"\n",
"# Combine for table display\n",
"top_features_pca = pd.DataFrame({\n",
" 'Top Contributors to PC1': top_pc1.index,\n",
" 'PC1 Loading': top_pc1.values,\n",
" 'Top Contributors to PC2': top_pc2.index,\n",
" 'PC2 Loading': top_pc2.values\n",
"})\n",
"\n",
"# Display contribution table\n",
"top_features_pca\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 300
},
"id": "0ivHvWwZvotx",
"outputId": "d7ee7df7-7c9d-4c6c-b933-7b6ef2d7beb5"
},
"id": "0ivHvWwZvotx",
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Top Contributors to PC1 PC1 Loading Top Contributors to PC2 \\\n",
"0 flavanoids 0.455850 malic_acid \n",
"1 total_phenols 0.422350 alcalinity_of_ash \n",
"2 od280/od315_of_diluted_wines 0.414876 proanthocyanins \n",
"3 proanthocyanins 0.339729 hue \n",
"4 hue 0.326202 total_phenols \n",
"5 proline 0.288751 flavanoids \n",
"6 malic_acid 0.275349 od280/od315_of_diluted_wines \n",
"7 alcalinity_of_ash 0.246336 proline \n",
"\n",
" PC2 Loading \n",
"0 0.567527 \n",
"1 0.461688 \n",
"2 0.435418 \n",
"3 0.358759 \n",
"4 0.278296 \n",
"5 0.192181 \n",
"6 0.149984 \n",
"7 0.097893 "
],
"text/html": [
"\n",
" <div id=\"df-90c55a98-4989-419f-8088-6d000ddff2da\" class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Top Contributors to PC1</th>\n",
" <th>PC1 Loading</th>\n",
" <th>Top Contributors to PC2</th>\n",
" <th>PC2 Loading</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>flavanoids</td>\n",
" <td>0.455850</td>\n",
" <td>malic_acid</td>\n",
" <td>0.567527</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>total_phenols</td>\n",
" <td>0.422350</td>\n",
" <td>alcalinity_of_ash</td>\n",
" <td>0.461688</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>od280/od315_of_diluted_wines</td>\n",
" <td>0.414876</td>\n",
" <td>proanthocyanins</td>\n",
" <td>0.435418</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>proanthocyanins</td>\n",
" <td>0.339729</td>\n",
" <td>hue</td>\n",
" <td>0.358759</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>hue</td>\n",
" <td>0.326202</td>\n",
" <td>total_phenols</td>\n",
" <td>0.278296</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>proline</td>\n",
" <td>0.288751</td>\n",
" <td>flavanoids</td>\n",
" <td>0.192181</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>malic_acid</td>\n",
" <td>0.275349</td>\n",
" <td>od280/od315_of_diluted_wines</td>\n",
" <td>0.149984</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>alcalinity_of_ash</td>\n",
" <td>0.246336</td>\n",
" <td>proline</td>\n",
" <td>0.097893</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-90c55a98-4989-419f-8088-6d000ddff2da')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-90c55a98-4989-419f-8088-6d000ddff2da button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-90c55a98-4989-419f-8088-6d000ddff2da');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
"\n",
"\n",
" <div id=\"df-5e7b9bd7-cd18-4d6e-adce-e79af36ea1ff\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-5e7b9bd7-cd18-4d6e-adce-e79af36ea1ff')\"\n",
" title=\"Suggest charts\"\n",
" style=\"display:none;\">\n",
"\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <g>\n",
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
" </g>\n",
"</svg>\n",
" </button>\n",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-5e7b9bd7-cd18-4d6e-adce-e79af36ea1ff button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
" </div>\n",
"\n",
" <div id=\"id_bd167a79-4704-4e01-8ef7-2ec1a00b3438\">\n",
" <style>\n",
" .colab-df-generate {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-generate:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-generate {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-generate:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
" <button class=\"colab-df-generate\" onclick=\"generateWithVariable('top_features_pca')\"\n",
" title=\"Generate code using this dataframe.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n",
" </svg>\n",
" </button>\n",
" <script>\n",
" (() => {\n",
" const buttonEl =\n",
" document.querySelector('#id_bd167a79-4704-4e01-8ef7-2ec1a00b3438 button.colab-df-generate');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" buttonEl.onclick = () => {\n",
" google.colab.notebook.generateWithVariable('top_features_pca');\n",
" }\n",
" })();\n",
" </script>\n",
" </div>\n",
"\n",
" </div>\n",
" </div>\n"
],
"application/vnd.google.colaboratory.intrinsic+json": {
"type": "dataframe",
"variable_name": "top_features_pca",
"summary": "{\n \"name\": \"top_features_pca\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"Top Contributors to PC1\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"total_phenols\",\n \"proline\",\n \"flavanoids\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"PC1 Loading\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.07678672472816576,\n \"min\": 0.24633574828460642,\n \"max\": 0.455850444677045,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.4223500946185095,\n 0.28875066093841634,\n 0.455850444677045\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Top Contributors to PC2\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 8,\n \"samples\": [\n \"alcalinity_of_ash\",\n \"flavanoids\",\n \"malic_acid\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"PC2 Loading\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.16580576937284205,\n \"min\": 0.0978932369209025,\n \"max\": 0.567527162794014,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.46168782846742695,\n 0.19218116385902806,\n 0.567527162794014\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"
}
},
"metadata": {},
"execution_count": 16
}
]
},
{
"cell_type": "markdown",
"source": [
"Loadings reflect how much each original feature contributes to a principal component.\n",
"\n",
"A high absolute value means the feature has a strong influence on that component.\n",
"\n",
"These are derived from the eigenvectors of the feature covariance matrix."
],
"metadata": {
"id": "kvPUyErowADy"
},
"id": "kvPUyErowADy"
}
],
"metadata": {
"colab": {
"provenance": [],
"include_colab_link": true
},
"language_info": {
"name": "python"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment