【字典學習+稀疏編碼Sparse Encoding】簡單介紹與sklearn的實現方式

文章目錄

  • 1、字典學習與稀疏編碼
  • 2、sklearn的實現
  • 3、示例

1、字典學習與稀疏編碼

  • 簡單來說,稀疏編碼就是把輸入向量(信號)/ 矩陣(圖像)表示為稀疏的系數向量和一組超完備基向量(字典)的線性組合。
  • 因此,稀疏編碼通過上述方式以后,就可以將輸入數據重構為稀疏的向量:即向量內部元素滿足只有很少的幾個非零元素或只有很少的幾個遠大于零的元素。
  • 一般情況下要求超完備基向量的個數k非常大(遠大于輸入數據的維度n),因為這樣的基向量組合才能更容易的學到輸入數據內在的結構和特征。
  • 為什么要轉換為稀疏向量?

1)特征選擇(Feature Selection): 直接對原始圖像提取的特征很多情況下其實是有冗余成分的,就是說我們只需要關鍵特征識別就可以,沒有必要用那么多特征,更多情況下,那些冗余信息會干擾我們最后的識別結果!而稀疏編碼可以實現特征的自動選擇,它會學習地去掉這些沒有信息的特征,也就是把這些特征對應的權重置為0。
2)可解釋性(Interpretability):另一個青睞于稀疏的理由是,模型更容易解釋,即只有那幾個關鍵特征會影響最終的結果,更容易解釋。

例如患某種病的概率是y,然后我們收集到的數據x是1000維的,也就是我們需要尋找這1000種因素到底是怎么影響患上這種病的概率的。通過學習,如果最后學習到的w*就只有很少的非零元素,例如只有5個非零的wi,那么我們就有理由相信,這些對應的特征在患病分析上面提供的信息是巨大的,決策性的。也就是說,患不患這種病只和這5個因素有關,那醫生就好分析多了。

  • 更多的稀疏編碼的解釋見該博客:https://blog.csdn.net/Julialove102123/article/details/78349811

2、sklearn的實現

  • 通過MiniBatchDictionaryLearning來實現字典學習與稀疏編碼
class sklearn.decomposition.MiniBatchDictionaryLearning(n_components=None, *, alpha=1, n_iter='deprecated',
max_iter=None, fit_algorithm='lars', n_jobs=None, batch_size=256, shuffle=True, dict_init=None,
transform_algorithm='omp', transform_n_nonzero_coefs=None, transform_alpha=None, verbose=False,
split_sign=False, random_state=None, positive_code=False, positive_dict=False, transform_max_iter=1000,
callback=None, tol=0.001, max_no_improvement=10)

1)n_components:int, default=None,要提取的字典中每個基向量/atoms的個數,每個基向量的維度應該為輸入向量的維度,因此字典的維度應該是(n_components, n_features)
2)alpha:float, default=1,正則化項(Lasso回歸項)的權重,用于平衡稀疏性和重構誤差
3)n_iter:int, default=1000,迭代的總次數,1.1版本棄用,改用max_iter
4)max_iter:int, default=None,迭代的最大次數(早停策略之前),不為None時,n_iter將被忽略
5)fit_algorithm:{‘lars’, ‘cd’}, default=’lars’,解決優化問題的算法(首先使用fit算法訓練出字典), 默認為lars,最小角度回歸
6)n_jobs:int, default=None,并行jobs的數量,默認為None,就是1
7)batch_size:int, default=256,每個mini-batch中的樣本數量
8)shuffle:bool, default=True,在構建batch之前是否打亂樣本
9)dict_init:ndarray of shape (n_components, n_features), default=None,字典的初始化值
10)transform_algorithm:{‘lasso_lars’, ‘lasso_cd’, ‘lars’, ‘omp’, ‘threshold’}, default=’omp’,用于變換數據的算法,即該算法用于學習每個樣本的稀疏的系數向量(即稀疏編碼的結果),再對原始輸入數據進行變換。每個樣本的稀疏向量的維度應該等于字典中的基向量的個數,即n_components,因此對輸入數據變換后的維度應該是(n_samples,n_components),每個向量都具有稀疏性。
11)transform_n_nonzero_coefs:int, default=None,在解的每一列中非零系數的數目。這只適用于algorithm='lars’和algorithm=‘omp’。如果None,則transform_n_nonzero_coefs=int(n_features / 10)。
12)transform_alpha:float, default=None,如果algorithm='lasso_lars’或algorithm=‘lasso_cd’, alpha是應用于L1范數的懲罰。如果algorithm=‘threshold’, alpha是閾值的絕對值,低于該閾值,系數將被壓扁為零。如果為None,默認為alpha。
13)split_sign:bool, default=False,是否將稀疏特征向量拆分為其負部分與正部分的拼接。這可以提高下游分類器的性能。
14)random_state:int, RandomState instance or None, default=None,當dict_init未被指定時,用于初始化字典
15)positive_code:bool, default=False,是否強制編碼為正
16)positive_dict:bool, default=False,是否強制字典為正
17)transform_max_iter:int, default=1000,如果algorithm=‘lasso_cd’或’lasso_lars’,執行的最大迭代次數。

  • 該類的成員變量:
    在這里插入圖片描述

  • components_是學習到的字典,[n_components, n_features],表示有n_components個基向量/atom,每個基向量的維度等于輸入向量的維度

  • 該類常用的的方法為:
    在這里插入圖片描述

1、fit(X, y=None)
擬合X中的數據,即學習到shape為[n_components, n_features]的字典
X:待學習/待訓練的樣本,[n_samples, n_featues]的ndarray
返回MiniBatchDictionaryLearning類實例本身2、transform(X)
將數據X編碼為字典atom/基向量的稀疏組合,返回的就是稀疏編碼的結果
X:待編碼的樣本,[n_samples, n_featues]的ndarray
返回:編碼后的結果,[n_samples, n_components]的ndarray,需要先進行fit后學習到字典再進行稀疏編碼3、fit_transform(X)
字典學習+稀疏編碼,就是上述兩個函數的結合
X:待學習/待訓練的樣本,[n_samples, n_featues]的ndarray
返回:編碼后的結果,[n_samples, n_features_new]的ndarray

3、示例

  • 先使用make_sparse_coded_signal構建訓練樣本X,是由dictionary和code相乘得到的
    在這里插入圖片描述
  • 構建字典學習/稀疏編碼 dict_learner,學習到的字典為:
    在這里插入圖片描述
  • 最后對輸入數據進行變換:
    在這里插入圖片描述
import numpy as np
from sklearn.datasets import make_sparse_coded_signal
from sklearn.decomposition import MiniBatchDictionaryLearningX, dictionary, code = make_sparse_coded_signal(n_samples=100, n_components=300, n_features=20,n_nonzero_coefs=10, random_state=42)dict_learner = MiniBatchDictionaryLearning(n_components=300, batch_size=4, transform_algorithm='lasso_lars',transform_alpha=0.1, random_state=42, shuffle=False)
X_transformed = dict_learner.fit_transform(np.transpose(X))
print(X_transformed)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38193.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38193.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38193.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vim打開文件中文是亂碼

vim打開文件中文是亂碼 問題:在Linux系統下,使用cat查看含有中文的文本文件正常,但是使用vim打開卻是亂碼 解決方法: 方法一: 在文件中設定 在vim的退出模式下 :set encodingutf8 方法二: 直接寫入/etc/…

ASP.NET WEB API通過SugarSql連接MySQL數據庫

注意:VS2022企業版可以,社區版可能存在問題。實體名稱和字段和數據庫中的要一致。 1、創建項目,安裝SqlSugarCore、Pomelo.EntityFrameworkCore.MySql插件 2、文件結構 2、appsettings.json { “Logging”: { “LogLevel”: { “Default”: …

Ubuntu 軟件依賴出錯處理

現象: apt-get install vim 正在讀取軟件包列表... 完成 正在分析軟件包的依賴關系樹 正在讀取狀態信息... 完成 您可能需要運行“apt-get -f install”來糾正下列錯誤: 下列軟件包有未滿足的依賴關系: cuttlefish-base : 依賴: f2fs-tools…

DG故障切換及DG Broker失效配置清理

DG故障切換及DG Broker失效配置清理 DG故障強制切主DG Broker原有配置清理 DG故障強制切主 主庫發生故障無法在短時間內恢復時,需要執行主備切換。此時由于DG Broker無法連接到主庫,故不能通過Broker切換,只能手動在備庫進行切主。 --斷開備…

Neo4j之MERGE基礎

在 Neo4j 中,MERGE 語句用于根據指定的模式進行創建或匹配節點和關系。它可以在節點或關系不存在時創建它們,并在已存在時進行匹配。 創建或匹配節點: MERGE (p:Person {name: John});這個查詢會檢查是否已經存在一個具有 "Person&quo…

搭建WebDAV服務手機ES文件瀏覽器遠程訪問

文章目錄 1. 安裝啟用WebDAV2. 安裝cpolar3. 配置公網訪問地址4. 公網測試連接5. 固定連接公網地址6. 使用固定地址測試連接 有時候我們想通過移動設備訪問群暉NAS 中的文件,以滿足特殊需求,我們在群輝中開啟WebDav服務,結合cpolar內網工具生成的公網地址,通過移動客戶端ES文件…

【LeetCode 算法】Find And Replace in String 字符串中的查找與替換-排序模擬

文章目錄 Find And Replace in String 字符串中的查找與替換問題描述:分析代碼排序模擬 Tag Find And Replace in String 字符串中的查找與替換 問題描述: 你會得到一個字符串 s (索引從 0 開始),你必須對它執行 k 個替換操作。替換操作以三…

docker通用鏡像方法,程序更新時不用重新構建鏡像

docker通用鏡像方法,程序更新時不用重新構建鏡像。更新可執行文件后,重新啟動容器就可運行。 功能 1、在demo目錄下添加腳本文件start.sh,里面執行demo.jar文件。 2、將demo目錄映射到鏡像下的 /workspace目錄。 3、Dockerfile文件中默認…

如何在Linux中強制關閉卡住的PyCharm

在使用PyCharm進行Python開發時,有時可能會遇到卡頓或無響應的情況。當PyCharm卡住時,我們需要強制關閉它以恢復正常操作。今天,我們將介紹在Linux系統中如何強制關閉PyCharm的幾種方法。 1. 使用鍵盤快捷鍵 在PyCharm所在的窗口中&#xf…

臺灣shopee:蝦皮電商平臺選品方法與市場機遇

臺灣Shopee蝦皮電商平臺為臺灣本土賣家和消費者提供了一個線上交易平臺。對于想要在臺灣市場做蝦皮電商的賣家來說,選擇合適的產品是非常重要的。本文介紹一些做蝦皮電商的選品方法和策略。 首先,了解市場需求是選品的基礎。在進入臺灣Shopee市場之前&a…

【Spring專題】Spring之Bean的生命周期源碼解析——階段二(IOC之實例化)

目錄 前言閱讀準備閱讀指引閱讀建議 課程內容一、SpringIOC之實例化1.1 簡單回顧1.2 概念回顧1.3 核心方法講解 二、方法講解2.1 AbstractBeanFactory#getMergedLocalBeanDefinition:合并BeanDefinition2.2 AbstractAutowireCapableBeanFactory#createBean&#xff…

oracle修改臨時表出現已使用的事務正在處理臨時表問題

錯誤提示: ORA-14450:試圖訪問已經在使用的事務處理臨時表 解決方法: 通過第一句sql來查找臨時表的object_id ,然后代入第二局sql來生成第三句sql語句。 最后再執行第三句sql語句即可kill session,執行修改表的操作。 SELECT * F…

華為OD機試-射擊比賽成績

題目描述 射擊比賽成績統計 給定一個射擊比賽成績單 包含多個選手若干次射擊的成績分數 請對每個選手按其最高三個分數之和進行降序排名 輸出降序排名后的選手ID序列 條件如下: 一個選手可以有多個射擊成績的分數 且次序不固定 如果一個選手成績小于三個 則認為選手的所有成績…

【Go 基礎篇】Go語言基本數據類型轉換:字符串、整數、浮點數、字符與布爾類型的轉換

介紹 在計算機編程中,不同的數據類型用于表示不同種類的數據。在Go語言(Golang)中,基本數據類型包括字符串、整數、浮點數、字符和布爾類型。在實際開發中,經常需要進行不同數據類型之間的轉換,以滿足不同…

安達發APS|APS排產軟件之計劃甘特圖

在當今全球化和競爭激烈的市場環境下,制造業企業面臨著巨大的壓力,如何在保證產品質量、降低成本以及滿足客戶需求的同時,提高生產效率和競爭力成為企業需要迫切解決的問題。在這個背景下,生產計劃的制定和執行顯得尤為重要。然而…

2023年京東按摩儀行業數據分析(京東銷售數據分析)

近年來,小家電行業憑借功能與顏值,取代黑電和白電,成為家電市場的主要增長點。在這一市場背景下,顏值更高、功能更豐富、品種更齊全的各類按摩儀,借助新消費和電子商務的風潮,陸續被推上市場。今年&#xf…

【Cocos Creator 項目實戰 】消滅星星加強版(附帶完整源碼工程)

本文乃Siliphen原創,轉載請注明出處 目錄 概述 游戲整體流程 游戲框架設計 單一職責的類 主要流程控制類 核心玩法模塊 UI: 游戲世界: 本文項目的代碼組織結構 作者項目實踐總結 場景只有一個入口腳本 盡量少在節點上掛載腳本 構…

從零構建深度學習推理框架-8 卷積算子實現

其實這一次課還蠻好理解的&#xff1a; 首先將kernel展平&#xff1a; for (uint32_t g 0; g < groups; g) {std::vector<arma::fmat> kernel_matrix_arr(kernel_count_group);arma::fmat kernel_matrix_c(1, row_len * input_c_group);for (uint32_t k 0; k < k…

macOS(m芯片)連接服務器及其進行文件傳輸的各種方式的詳解

說明&#xff1a;使用了macOS后發現&#xff0c;win系統能使用的xshell、xftp等連接服務器及其文件傳輸等軟件均不能使用了&#xff0c;沒有兼容的版本。所以我們剛切換到mac系統該如何去適應呢。 一、連接遠程服務器 macOS中前文也說道我們使用的是iterm2進行終端控制的&…

基于深度信念神經網絡的礦石產量預測,基于DBN的礦石產量預測,DBN的詳細原理

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) DBN的礦石產量預測 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類算法,本文將DBN算法進行礦石產量預測 DB…