{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/history-pca-a-new-algorithm-for-streaming-pca","title":"History PCA: A New Algorithm for Streaming PCA","arxiv_id":"1802.05447","date":"2018-02-15","proceeding":null,"authors":["Puyudi Yang","Cho-Jui Hsieh","Jane-Ling Wang"],"abstract":"In this paper we propose a new algorithm for streaming principal component\nanalysis. With limited memory, small devices cannot store all the samples in\nthe high-dimensional regime. Streaming principal component analysis aims to\nfind the $k$-dimensional subspace which can explain the most variation of the\n$d$-dimensional data points that come into memory sequentially. In order to\ndeal with large $d$ and large $N$ (number of samples), most streaming PCA\nalgorithms update the current model using only the incoming sample and then\ndump the information right away to save memory. However the information\ncontained in previously streamed data could be useful. Motivated by this idea,\nwe develop a new streaming PCA algorithm called History PCA that achieves this\ngoal. By using $O(Bd)$ memory with $B\\approx 10$ being the block size, our\nalgorithm converges much faster than existing streaming PCA algorithms. By\nchanging the number of inner iterations, the memory usage can be further\nreduced to $O(d)$ while maintaining a comparable convergence speed. We provide\ntheoretical guarantees for the convergence of our algorithm along with the rate\nof convergence. We also demonstrate on synthetic and real world data sets that\nour algorithm compares favorably with other state-of-the-art streaming PCA\nmethods in terms of the convergence speed and performance.","url_abs":"http://arxiv.org/abs/1802.05447v1","url_pdf":"http://arxiv.org/pdf/1802.05447v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"history-pca-a-new-algorithm-for-streaming-pca","repo_url":"https://github.com/aamcbee/AdaOja","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[],"methods":[{"method_slug":"pca","method_name":"PCA"},{"method_slug":"speed","method_name":"SPEED"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1802.05447","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1802.05447"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/aamcbee/AdaOja","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"summary":{"unverified":8},"by_repo_kind":{"listed":{"samples":8,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"f381eb97725c14b9","entry":"get_bagX","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"data_strm_subclass.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/data_strm_subclass.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"f381eb97725c14b9"}},{"code_sha256_prefix":"b6712e8b655958d6","entry":"get_bagXblocks","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"data_strm_subclass.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/data_strm_subclass.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"b6712e8b655958d6"}},{"code_sha256_prefix":"85f93bd361205ced","entry":"list_exp_var","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"streaming_subclass.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/streaming_subclass.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"85f93bd361205ced"}},{"code_sha256_prefix":"d521582b745e7ae8","entry":"list_mean","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"streaming_subclass.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/streaming_subclass.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"d521582b745e7ae8"}},{"code_sha256_prefix":"f5ebca5bfa1c569a","entry":"list_xnorm2","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"streaming_subclass.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/streaming_subclass.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"f5ebca5bfa1c569a"}},{"code_sha256_prefix":"87b486a516fc367a","entry":"random_multinomial","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"simulated_data.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/simulated_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"87b486a516fc367a"}},{"code_sha256_prefix":"74a4d0cc0eaaef64","entry":"random_multivar_normal","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"simulated_data.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/simulated_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"74a4d0cc0eaaef64"}},{"code_sha256_prefix":"d505e38a8db19e9e","entry":"spiked_covariance","repo":"aamcbee/AdaOja","repo_kind":"listed","path":"simulated_data.py","file_url":"https://github.com/aamcbee/AdaOja/blob/HEAD/simulated_data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"d505e38a8db19e9e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}