{"metadata":{"kernelspec":{"display_name":"Python 3","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.10.12"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":39763,"databundleVersionId":11756775,"sourceType":"competition"}],"dockerImageVersionId":30839,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false},"papermill":{"default_parameters":{},"duration":683.069121,"end_time":"2025-02-12T10:03:03.445535","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2025-02-12T09:51:40.376414","version":"2.6.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **Wave PCA Dimensionality Reduction**","metadata":{"_cell_guid":"c1787d57-048f-4503-a7cf-41715ebfc62f","_uuid":"9e0e6e4f-7620-46d8-a171-bf22941f9344","collapsed":false,"jupyter":{"outputs_hidden":false},"papermill":{"duration":0.00425,"end_time":"2025-02-12T09:51:43.307755","exception":false,"start_time":"2025-02-12T09:51:43.303505","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"PCA 3D visualization is a way to reduce high-dimensional data into three principal components (3D) so you can visualize the structure of the data more easily using a 3D scatter plot.","metadata":{}},{"cell_type":"markdown","source":"### **Principal Component Analysis (PCA)**  \n\n#### **1. Standardization**  \nGiven data $( \\mathbf{X} $), standardize it:  \n$$\n\\mathbf{Z} = \\left( \\mathbf{X} - \\mathbf{1}_n \\boldsymbol{\\mu}^\\top \\right) \\mathbf{D}^{-1/2}\n$$","metadata":{}},{"cell_type":"markdown","source":"#### **2. Eigenvalue Decomposition**  \nSolve for principal directions:  \n$$\n\\mathbf{C} = \\mathbf{V} \\boldsymbol{\\Lambda} \\mathbf{V}^\\top, \\quad \\text{where } \\mathbf{C} = \\frac{1}{n} \\mathbf{Z}^\\top \\mathbf{Z}\n$$","metadata":{}},{"cell_type":"markdown","source":"#### **3. Projection**  \nThe transformed data $( \\mathbf{T} $) is:  \n$$\n\\mathbf{T} = \\mathbf{Z} \\mathbf{V}\n$$","metadata":{}},{"cell_type":"markdown","source":"#### **4. Dimensionality Reduction**  \nKeep top $( k $) components:  \n$$\n\\mathbf{T}_k = \\mathbf{Z} [\\mathbf{v}_1, \\dots, \\mathbf{v}_k]\n$$\n\n","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nimport random\nimport matplotlib.pyplot as plt\nimport imageio\nimport os\nimport cv2\nfrom mpl_toolkits.mplot3d import Axes3D","metadata":{"papermill":{"duration":4.017375,"end_time":"2025-02-12T09:51:47.335556","exception":false,"start_time":"2025-02-12T09:51:43.318181","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-04-12T07:48:33.430210Z","iopub.execute_input":"2025-04-12T07:48:33.430577Z","iopub.status.idle":"2025-04-12T07:48:33.435794Z","shell.execute_reply.started":"2025-04-12T07:48:33.430548Z","shell.execute_reply":"2025-04-12T07:48:33.434590Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.decomposition import PCA\n\ndef show3dpca(train):\n    flattened = train.reshape(500, -1)\n    pca = PCA(n_components=3)\n    train_3d = pca.fit_transform(flattened)\n    labels = np.zeros(500)\n\n    x = train_3d[:,0]\n    y = train_3d[:,1]\n    z = train_3d[:,2]\n    fig = plt.figure(figsize=(12,12))\n    ax = fig.add_subplot(111, projection='3d')\n    scatter = ax.scatter(x, y, z, c=labels, cmap='viridis', alpha=0.5)\n    ax.set_xlabel('PCA-1')\n    ax.set_ylabel('PCA-2')\n    ax.set_zlabel('PCA-3') \n    cbar = fig.colorbar(scatter, ax=ax)\n    cbar.set_label('Label')\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-12T07:48:33.437386Z","iopub.execute_input":"2025-04-12T07:48:33.437726Z","iopub.status.idle":"2025-04-12T07:48:33.451950Z","shell.execute_reply.started":"2025-04-12T07:48:33.437696Z","shell.execute_reply":"2025-04-12T07:48:33.450856Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"CurveFault_A","metadata":{}},{"cell_type":"code","source":"path0='/kaggle/input/waveform-inversion/train_samples/CurveFault_A/seis2_1_0.npy'\ntrain0 = np.load(path0)\nprint(train0.shape)\nshow3dpca(train0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-12T07:48:33.453402Z","iopub.execute_input":"2025-04-12T07:48:33.453791Z","iopub.status.idle":"2025-04-12T07:48:34.020643Z","shell.execute_reply.started":"2025-04-12T07:48:33.453762Z","shell.execute_reply":"2025-04-12T07:48:34.019598Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"path1='/kaggle/input/waveform-inversion/train_samples/CurveFault_A/vel2_1_0.npy'\ntrain1 = np.load(path1)\nprint(train1.shape)\nshow3dpca(train1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-12T07:49:56.186841Z","iopub.execute_input":"2025-04-12T07:49:56.187191Z","iopub.status.idle":"2025-04-12T07:50:04.376839Z","shell.execute_reply.started":"2025-04-12T07:49:56.187162Z","shell.execute_reply":"2025-04-12T07:50:04.375734Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"CurveVel_A","metadata":{}},{"cell_type":"code","source":"path2='/kaggle/input/waveform-inversion/train_samples/CurveVel_A/model/model1.npy'\ntrain2 = np.load(path2)\nprint(train2.shape)\nshow3dpca(train2)\n","metadata":{"papermill":{"duration":0.339338,"end_time":"2025-02-12T10:02:58.96432","exception":false,"start_time":"2025-02-12T10:02:58.624982","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"path3='/kaggle/input/waveform-inversion/train_samples/CurveVel_A/model/model1.npy'\ntrain3 = np.load(path3)\nprint(train3.shape)\nshow3dpca(train3)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}