{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pickle, os\nimport scipy.sparse\nimport gc","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-11-06T09:53:37.591775Z","iopub.execute_input":"2022-11-06T09:53:37.592315Z","iopub.status.idle":"2022-11-06T09:53:37.642161Z","shell.execute_reply.started":"2022-11-06T09:53:37.592205Z","shell.execute_reply":"2022-11-06T09:53:37.641254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_inputs = scipy.sparse.load_npz(\"../input/multimodal-single-cell-as-sparse-matrix/train_multi_inputs_values.sparse.npz\")\ntest_inputs = scipy.sparse.load_npz(\"../input/multimodal-single-cell-as-sparse-matrix/test_multi_inputs_values.sparse.npz\")","metadata":{"execution":{"iopub.status.busy":"2022-11-06T09:53:38.716319Z","iopub.execute_input":"2022-11-06T09:53:38.716741Z","iopub.status.idle":"2022-11-06T09:55:15.189616Z","shell.execute_reply.started":"2022-11-06T09:53:38.716688Z","shell.execute_reply":"2022-11-06T09:55:15.188742Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"inputs = scipy.sparse.vstack([train_inputs, test_inputs])\ndel train_inputs, test_inputs\ngc.collect()\n\n# round to 0-1 and ceil to binarize 0 and 1\ninputs = inputs / inputs.max()\ninputs = inputs.ceil()\nprint(f\"binarized input shape:  {str(inputs.shape):14} {inputs.size*4/1024/1024/1024:2.3f} GByte\")","metadata":{"execution":{"iopub.status.busy":"2022-11-06T09:55:15.190993Z","iopub.execute_input":"2022-11-06T09:55:15.191486Z","iopub.status.idle":"2022-11-06T09:55:49.961036Z","shell.execute_reply.started":"2022-11-06T09:55:15.191456Z","shell.execute_reply":"2022-11-06T09:55:49.959417Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Then use TruncatedSVD to reduce dimension","metadata":{}},{"cell_type":"code","source":"def pca_save(name, model):\n    with open(name, 'wb') as f:\n        pickle.dump(model, f)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Make your own choice for this dimension\nk1 = 128\npath = f'./Multiome_svd_{k1}_binarize.pkl'\n\nif os.path.exists(path):\n    with open(path, 'rb') as f:\n        svd1 = pickle.load(f)\n    print(svd1.explained_variance_ratio_.sum())\n    inputs = svd1.transform(inputs)\n\nelse:\n    pca1 = TruncatedSVD(n_components=k1, random_state=42)\n    inputs = svd1.fit_transform(inputs)\n    print(svd1.explained_variance_ratio_.sum())\n    pca_save(path, svd1)\n\n#st = StandardScaler()\n#inputs = st.fit_transform(inputs) \ntrain_inputs = inputs[:105942].astype(np.float32)\ntest_inputs = inputs[105942:].astype(np.float32)\n\ndel inputs\ngc.collect()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Next It is time to train your model\n#### If it's helpful for you, please upvote thanks!","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}