Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Python ではじめるスパースモデリング
Search
Hacarus Inc.
May 19, 2018
Technology
3.2k
1
Share
Python ではじめるスパースモデリング
Presentation Slides at PyCon mini Osaka 2018
https://osaka.pycon.jp/
Hacarus Inc.
May 19, 2018
More Decks by Hacarus Inc.
See All by Hacarus Inc.
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
1.3k
QA4AIに則ったMLOpsツールの活用
hacarus
0
730
0から協働ロボット外観検査システムを3ヵ月で具現化した軌跡
hacarus
0
290
ワンちゃんの健康を願う皆様に送る 犬心電図AI解析プロダクト紹介_AWS DevDay2022
hacarus
0
220
犬の心電AI解析プロダクト開発奮闘記 _クラウドからハード開発までてんこ盛り
hacarus
0
2.2k
ExplainableAIの概要とAmazon SageMaker Clarifyでの実装例
hacarus
0
1.2k
AWS Step Functions を用いた非同期学習処理の例
hacarus
0
1.5k
Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー
hacarus
0
1.5k
Interpretable Machine Learning: モデル非依存な解釈手法の紹介
hacarus
0
1.2k
Other Decks in Technology
See All in Technology
最低限これだけ押さえれ大丈夫_Claude Enterprise/Team企業展開ガバナンス入門
tkikuchi
1
270
「使われるデータ基盤」を目指してデータアナリストとワークショップをやった話
jackojacko_
2
900
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
260
oracle-to-databricks-migration-with-llm-and-dbt
casek
0
290
個人AIからチームAIへ:開発における品質と生産性の再設計
moongift
PRO
0
220
はじめてのDatadog
kairim0
0
100
Typiaで配信JSONの安全性を構造的に担保する(TSKaigi2026)
righttouch
PRO
1
190
OpenClawとHermesAgentでAI新入社員を作った話
takanoriyanada
0
120
基礎から解説!Icebergで紐解くSnowflake×Databricks連携の現在地
cm_yasuhara
0
340
Java正規表現エンジン(NFA)の仕組みと パフォーマンスを維持するための最適化手法
takeuchi_132917
0
120
大規模環境でどのように監視を実現する?
yuobayashi
1
150
Javaコミュニティをもっと楽しむための9箇条
takasyou
0
280
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
150
Visualization
eitanlees
151
17k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
200
Making the Leap to Tech Lead
cromwellryan
135
9.8k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
380
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Curse of the Amulet
leimatthew05
1
12k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
210
Information Architects: The Missing Link in Design Systems
soysaucechin
0
940
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
380
Transcript
Python ではじめるスパースモデリング 2018年5月19日 PyCon mini Osaka @ ヤフー株式会社 GFOオフィス
છాوࢤ ͦΊ͔ͩͨ͠ • גࣜձࣾϋΧϧε औక$50 • 1ZUIPOྺ • .BDIJOF-FBSOJOH.FFUVQ,"/4"*
্ཱͪ͛ • IUUQTNMNLBOTBJDPOOQBTTDPN
ϋΧϧεͱ • ϥΠϑαΠΤϯεɾ࢈ۀ Y"* • εύʔεϞσϦϯάΛ࣠ͱͨ͠σʔλղੳ • ౦େֶɾେؔਅ೭।ڭत͕ΞυόΠβʔ
ຊͷΰʔϧ • εύʔεϞσϦϯάΛͬͯΒ͏ • 1ZUIPOͰͷΞϧΰϦζϜ࣮ΛΈͯΒ͏ • ߟ͑ํɾಛʹڵຯΛͬͯΒ͏
εύʔεϞσϦϯάͱ
εύʔεϞσϦϯά • σʔλʹࡏ͢Δεύʔεੑʹணͯ͠ɺࣄ ΛϞσϧԽ͢Δख๏ • ୯ҰͷΞϧΰϦζϜΛࢦ͢Θ͚Ͱͳ͍ • ࠒ͔Β׆ൃʹݚڀ͞Ε͍ͯΔ
σϞ • Χϝϥ͔Βͷը૾Λֶश • എܠΛਪఆ • ҠಈମΛݕग़
ػցֶशͷಋೖ࣌ͷ՝ • ࣗಈԽ͍͕ͨ͠ɺઆ໌͋Δ • σʔλऩूͷ࣌ؒίετ͕େ͖͍ • ϋʔυΣΞͷίετ͍͑ͨ
εύʔεϞσϦϯάͷظ • ೖྗಛྔͷதͷॏཁͳͷ͕Θ͔Δ • গྔͷใ͔ΒਪఆΛߦ͑Δ • (16ڥҎ֎Ͱಈ࡞͢Δ
ઢܗճؼͰͷεύʔεϞσϦϯά • લఏ • ग़ྗ Z ɺೖྗ Yͷઢܗ݁߹ͱ؍ଌϊΠζЏͰදݱ͞ΕΔ • ೖྗ
Y N ࣍ݩɺ؍ଌ͞Εͨ Z O ݸ͋Δͱ͢Δ ! = #$ %$ + ⋯ + #( %( + ) 㱺 Z Λ͍͍ײ͡ʹઆ໌͢Δ X ΛΓ͍ͨ
ઢܗճؼͰͷεύʔεϞσϦϯά • ղ͖͘ • ؍ଌ Z ͱਪఆͨ͠ X ͔Βܭࢉ͞ΕΔͷೋޡࠩΛ࠷খԽ min
1 2 & − () * 㱺 Z ͷαϯϓϧ͕ Y ͷ࣍ݩΑΓখ͍͞߹ʁ
εύʔε੍ͷՃ • ະͷΑΓํఔࣜͷ͕গͳ͍࿈ཱํఔࣜ • Yʹର͢Δεύʔεͳ੍ΛՃͯ͠ղ͘ • ʮͳΔ͘গͳ͍ Y Ͱ݅Λຬͨ͢ʯ 㱺ʮͳΔ͘ଟ͘ͷ
X Λ ʹ͢Δʯ • ૉʹΔͱɺΈ߹Θͤ࠷దԽ㽊
-ϊϧϜ࠷దԽ • ੍݅Λ؇ • ʮX ͷઈରͷ૯ΛͳΔ͘খ͘͢͞Δʯ • ؇ͯ͠େҬత࠷దղ͕ಘΒΕΔ • తʹղ͘͜ͱ͕Ͱ͖Δ
• -FBTU"CTPMVUF4ISJOLBHFBOE4FMFDUJPO 0QFSBUPS ͷུ • -ϊϧϜΛਖ਼ଇԽ߲ͱͯ͠Ճͨ͠తؔ -BTTP min 1 2
& − () * + , ( - 㱺 ਖ਼ଇԽύϥϝʔλЕͰεύʔε੍ͷޮ͖Λௐ
छʑͷΞϧΰϦζϜ • ࠲ඪ߱Լ๏ $PPSEJOBUF%FTDFOU • ࠷খ֯ճؼ -FBTU"OHMF3FHSFTTJPO • ෮ॖখᮢΞϧΰϦζϜ *45"
• ަޓํ๏ "%..
ྫɿ࠲ඪ߱Լ๏ͷΞϧΰϦζϜ 1. #$ % = 1, … , ) ΛॳظԽ
2. + #$ = , - . /0 . 1 , 2 Ͱߋ৽ 3($) = 6 − 8 9:$ ; 9 #9 ͱ͠ɺ, ೈᮢ࡞༻ૉͱ͢Δ 3. ऩଋ݅·Ͱ܁Γฦ͠
ೈᮢ࡞༻ૉ • Λθϩʹ͚ۙͮΔ࡞༻Λ࣋ͭ S ", $ = & " −
$, (" ≥ $) 0, (−$ < " < $) " + $, (" ≤ −$)
ྫɿ࠲ඪ߱Լ๏ͷ࣮ྫ # def soft_threshold(X, thresh): return np.where(np.abs(X) <= thresh,
0, X - thresh * np.sign(X)) # w_cd = np.zeros(n_features) for _ in range(n_iter): for j in range(n_features): w_cd[j] = 0.0 r_j = y - np.dot(X, w_cd) w_cd[j] = soft_threshold(np.dot(X[:, j], r_j) / n_samples, alpha)
࣮ߦ݁Ռ ೖྗಛྔͷ࣍ݩ ඇθϩཁૉ αϯϓϧ
ͦͷଞͷ࣮ • TDJLJUMFBSO • ࠲ඪ߱Լ๏ͱ࠷খ֯ճؼ • IUUQTDJLJUMFBSOPSHTUBCMFNPEVMFTHFOFSBUFETLMFBSOMJOFBS@NPEFM-BTTPIUNM • IUUQTDJLJUMFBSOPSHTUBCMFNPEVMFTHFOFSBUFETLMFBSOMJOFBS@NPEFM-BTTP-BSTIUNM •
TQNJNBHF • ަޓํ๏ • IUUQTHJUIVCDPNIBDBSVTTQNJNBHFCMPCEFWFMPQNFOUTQNJNBHFMJOFBS@NPEFMBENNQZ
TQNJNBHF • εύʔεϞσϦϯά༻ϥΠϒϥϦ • ը૾ղੳʹ༻͍ΒΕΔΞϧΰϦζϜΛத৺ʹ • TDJLJUMFBSOΠϯλʔϑΣʔεʹ४ڌ • IUUQTHJUIVCDPNIBDBSVTTQNJNBHF
ը૾ॲཧͷద༻ • جຊΞΠσΟΞ • ը૾͔ΒύονΛΓग़͢ • ύονΛಉαΠζͷࣙॻجఈͷઢܕ݁߹Ͱදݱ͢Δ • ը૾શମΛදݱ͢ΔͨΊࣙॻֶश͢Δ
ը૾ॲཧͷద༻ :ը૾ "ࣙॻ ! "# $# 9
ࣙॻʹΑΔ࠶ߏ Yύον جఈͰͷ࠶ߏ݁Ռ
ྫɿࣙॻֶशͱ࠶ߏ # patches = extract_simple_patches_2d(img, patch_size) #
patches = patches.reshape(patches.shape[0], -1).astype(np.float64) intercept = np.mean(patches, axis=0) patches -= intercept patches /= np.std(patches, axis=0) # model = MiniBatchDictionaryLearning(n_components=n_basis, alpha=1, n_iter=n_iter, n_jobs=1) model.fit(patches) # reconstructed_patches = np.dot(code, model.components_) reconstructed_patches = reconstructed_patches.reshape(len(patches), *patch_size) reconstructed = reconstruct_from_simple_patches_2d(reconstructed_patches, img.shape)
ܽଛิͷద༻ ܽଛΛߟྀͨࣙ͠ॻֶशʹΑΔใ෮ݩ ը૾ :ʹର͠ྼԽ࡞༻ૉ .͕͔͔Δͱߟ͑ͯॲཧΛߦ͏
·ͱΊ
εύʔεϞσϦϯάͱ • ೖྗಛྔͷதͷॏཁͳͷ͕Θ͔Δ • গྔͷใͰ͡ΊΔ͜ͱ͕Ͱ͖Δ • طଘ࣮ΛͬͯؾܰʹࢼͤΔ • TDJLJUMFBSO TQNJNBHF
• ຊͷ༰ ˠ IUUQTHJUJPWQY2