$30 off During Our Annual Pro Sale. View Details »

Python ではじめるスパースモデリング

Python ではじめるスパースモデリング

Presentation Slides at PyCon mini Osaka 2018
https://osaka.pycon.jp/

Hacarus Inc.

May 19, 2018
Tweet

More Decks by Hacarus Inc.

Other Decks in Technology

Transcript

  1. Python ではじめるスパースモデリング
    2018年5月19日
    PyCon mini Osaka
    @ ヤフー株式会社 GFOオフィス

    View Slide

  2. છాوࢤ ͦΊ͔ͩͨ͠

    • גࣜձࣾϋΧϧε औక໾$50
    • 1ZUIPOྺ ೥
    • .BDIJOF-FBSOJOH.FFUVQ,"/4"* ্ཱͪ͛
    • IUUQTNMNLBOTBJDPOOQBTTDPN

    View Slide

  3. ϋΧϧεͱ͸
    • ϥΠϑαΠΤϯεɾ࢈ۀ෼໺ Y"*
    • εύʔεϞσϦϯάΛ࣠ͱͨ͠σʔλղੳ
    • ౦๺େֶɾେؔਅ೭।ڭत͕ΞυόΠβʔ

    View Slide

  4. ຊ೔ͷΰʔϧ
    • εύʔεϞσϦϯάΛ஌ͬͯ΋Β͏
    • 1ZUIPOͰͷΞϧΰϦζϜ࣮૷ΛΈͯ΋Β͏
    • ߟ͑ํɾಛ௃ʹڵຯΛ΋ͬͯ΋Β͏

    View Slide

  5. εύʔεϞσϦϯάͱ͸

    View Slide

  6. εύʔεϞσϦϯά
    • σʔλʹ಺ࡏ͢Δεύʔεੑʹண໨ͯ͠ɺࣄ৅
    ΛϞσϧԽ͢Δख๏
    • ୯ҰͷΞϧΰϦζϜΛࢦ͢Θ͚Ͱ͸ͳ͍
    • ೥ࠒ͔Β׆ൃʹݚڀ͞Ε͍ͯΔ

    View Slide

  7. σϞ
    • Χϝϥ͔Βͷը૾Λֶश
    • എܠΛਪఆ
    • ҠಈମΛݕग़

    View Slide

  8. ػցֶशͷಋೖ࣌ͷ՝୊
    • ࣗಈԽ͸͍͕ͨ͠ɺઆ໌੹೚͸͋Δ
    • σʔλऩूͷ࣌ؒ΍ίετ͕େ͖͍
    • ϋʔυ΢ΣΞͷίετ͸཈͍͑ͨ

    View Slide

  9. εύʔεϞσϦϯά΁ͷظ଴
    • ೖྗಛ௃ྔͷதͷॏཁͳ΋ͷ͕Θ͔Δ
    • গྔͷ৘ใ͔Β΋ਪఆΛߦ͑Δ
    • (16؀ڥҎ֎Ͱ΋ಈ࡞͢Δ

    View Slide

  10. ઢܗճؼͰͷεύʔεϞσϦϯά
    • લఏ
    • ग़ྗ Z ͸ɺೖྗ Yͷઢܗ݁߹ͱ؍ଌϊΠζЏͰදݱ͞ΕΔ
    • ೖྗ Y ͸ N ࣍ݩɺ؍ଌ͞Εͨ Z ͸ O ݸ͋Δͱ͢Δ
    ! = #$
    %$
    + ⋯ + #(
    %(
    + )
    㱺 Z Λ͍͍ײ͡ʹઆ໌͢Δ X Λ஌Γ͍ͨ

    View Slide

  11. ઢܗճؼͰͷεύʔεϞσϦϯά
    • ղ͘΂͖໰୊
    • ؍ଌ஋ Z ͱਪఆͨ͠ X ͔Βܭࢉ͞ΕΔ஋ͷೋ৐ޡࠩΛ࠷খԽ
    min
    1
    2
    & − () *
    㱺 Z ͷαϯϓϧ਺͕ Y ͷ࣍ݩΑΓ΋খ͍͞৔߹͸ʁ

    View Slide

  12. εύʔε੍໿ͷ௥Ճ
    • ະ஌਺ͷ਺ΑΓํఔࣜͷ਺͕গͳ͍࿈ཱํఔࣜ
    • Yʹର͢Δεύʔεͳ੍໿Λ௥Ճͯ͠ղ͘
    • ʮͳΔ΂͘গͳ͍ Y Ͱ৚݅Λຬͨ͢ʯ
    㱺ʮͳΔ΂͘ଟ͘ͷ X Λ ʹ͢Δʯ
    • ૉ௚ʹ΍Δͱɺ૊Έ߹Θͤ࠷దԽ໰୊㽊

    View Slide

  13. -ϊϧϜ࠷దԽ
    • ੍໿৚݅Λ؇࿨
    • ʮX ͷઈର஋ͷ૯࿨ΛͳΔ΂͘খ͘͢͞Δʯ
    • ؇࿨ͯ͠΋େҬత࠷దղ͕ಘΒΕΔ
    • ਺஋తʹղ͘͜ͱ͕Ͱ͖Δ

    View Slide

  14. • -FBTU"CTPMVUF4ISJOLBHFBOE4FMFDUJPO
    0QFSBUPS ͷུ
    • -ϊϧϜΛਖ਼ଇԽ߲ͱͯ͠௥Ճͨ͠໨తؔ਺
    -BTTP
    min
    1
    2
    & − () * + , ( -
    㱺 ਖ਼ଇԽύϥϝʔλЕͰεύʔε੍໿ͷޮ͖Λௐ੔

    View Slide

  15. छʑͷΞϧΰϦζϜ
    • ࠲ඪ߱Լ๏ $PPSEJOBUF%FTDFOU

    • ࠷খ֯ճؼ -FBTU"OHMF3FHSFTTJPO

    • ൓෮ॖখᮢ஋ΞϧΰϦζϜ *45"

    • ަޓํ޲৐਺๏ "%..

    View Slide

  16. ྫɿ࠲ඪ߱Լ๏ͷΞϧΰϦζϜ
    1. #$
    % = 1, … , ) ΛॳظԽ
    2. +
    #$
    = , - . /0 .
    1
    , 2 Ͱߋ৽
    3($) = 6 − 8
    9:$
    ; 9
    #9 ͱ͠ɺ, ͸ೈᮢ஋࡞༻ૉͱ͢Δ
    3. ऩଋ৚݅·Ͱ܁Γฦ͠

    View Slide

  17. ೈᮢ஋࡞༻ૉ
    • ஋Λθϩʹ͚ۙͮΔ࡞༻Λ࣋ͭ
    S ", $ = &
    " − $, (" ≥ $)
    0, (−$ < " < $)
    " + $, (" ≤ −$)

    View Slide

  18. ྫɿ࠲ඪ߱Լ๏ͷ࣮૷ྫ
    #

    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)

    View Slide

  19. ࣮ߦ݁Ռ
    ೖྗಛ௃ྔͷ࣍ݩ͸ ඇθϩཁૉ͸ αϯϓϧ਺͸

    View Slide

  20. ͦͷଞͷ࣮૷
    • TDJLJUMFBSO
    • ࠲ඪ߱Լ๏ͱ࠷খ֯ճؼ
    • IUUQTDJLJUMFBSOPSHTUBCMFNPEVMFTHFOFSBUFETLMFBSOMJOFBS@NPEFM-BTTPIUNM
    • IUUQTDJLJUMFBSOPSHTUBCMFNPEVMFTHFOFSBUFETLMFBSOMJOFBS@NPEFM-BTTP-BSTIUNM
    • TQNJNBHF
    • ަޓํ޲৐਺๏
    • IUUQTHJUIVCDPNIBDBSVTTQNJNBHFCMPCEFWFMPQNFOUTQNJNBHFMJOFBS@NPEFMBENNQZ

    View Slide

  21. TQNJNBHF
    • εύʔεϞσϦϯά༻ϥΠϒϥϦ
    • ը૾ղੳʹ༻͍ΒΕΔΞϧΰϦζϜΛத৺ʹ
    • TDJLJUMFBSOΠϯλʔϑΣʔεʹ४ڌ
    • IUUQTHJUIVCDPNIBDBSVTTQNJNBHF

    View Slide

  22. ը૾ॲཧ΁ͷద༻
    • جຊΞΠσΟΞ
    • ը૾͔ΒύονΛ੾Γग़͢
    • ύονΛಉαΠζͷࣙॻجఈͷઢܕ݁߹Ͱදݱ͢Δ
    • ը૾શମΛදݱ͢ΔͨΊࣙॻ΋ֶश͢Δ

    View Slide

  23. ը૾ॲཧ΁ͷద༻
    :ը૾
    "ࣙॻ
    ! "#
    $#
    9܎਺

    View Slide

  24. ࣙॻʹΑΔ࠶ߏ੒
    Yύον جఈͰͷ࠶ߏ੒݁Ռ

    View Slide

  25. ྫɿࣙॻֶशͱ࠶ߏ੒
    #

    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)

    View Slide

  26. ܽଛิ׬΁ͷద༻
    ܽଛ஋Λߟྀͨࣙ͠ॻֶशʹΑΔ৘ใ෮ݩ
    ը૾ :ʹର͠ྼԽ࡞༻ૉ .͕͔͔Δͱߟ͑ͯॲཧΛߦ͏

    View Slide

  27. ·ͱΊ

    View Slide

  28. εύʔεϞσϦϯάͱ͸
    • ೖྗಛ௃ྔͷதͷॏཁͳ΋ͷ͕Θ͔Δ
    • গྔͷ৘ใͰ΋͸͡ΊΔ͜ͱ͕Ͱ͖Δ
    • طଘ࣮૷Λ࢖ͬͯؾܰʹࢼͤΔ
    • TDJLJUMFBSO΍ TQNJNBHF
    • ຊ೔ͷ಺༰ ˠ IUUQTHJUJPWQY2

    View Slide