Slide 1

Slide 1 text

Python ではじめるスパースモデリング 2018年1月19日 はんなり Python #2 @ウィングス京都

Slide 2

Slide 2 text

છాوࢤ ͦΊ͔ͩͨ͠ • גࣜձࣾϋΧϧε औక໾$50 • 1ZUIPOྺ ೥ • ؔ+BWBɾ+"846(ɾ%FW-07&ؔ੢ ք۾

Slide 3

Slide 3 text

$50JTԿ • $IJFG5BMLJOH 0GGJDFS • ϋΧϧεͷ։ൃ੹೚ऀ • )BDBSVT 'JU৯ࣄ΍ӡಈʹج͍݈ͮͨ߁؅ཧαʔϏε • )"$"3649ػցֶशΛ༻͍ͨσʔλղੳαʔϏε • ೔ຊɺϑΟϦϐϯʹ໊ͷ։ൃϝϯόʔ

Slide 4

Slide 4 text

ϋΧϧεͷٕज़ελοΫ • όοΫΤϯυɿ1ZUIPO 'MBTL42-"MDIFNZ • ϑϩϯτΤϯυ 3FBDU+4 • ϞόΠϧɿ4XJGU,PUMJO • Πϯϑϥɿ"841ZUIPO GBCSJDBOTJCMF • ػցֶशɿ1ZUIPO TDJLJUMFBSOKVQZUFS

Slide 5

Slide 5 text

ຊ೔ͷΰʔϧ εύʔεϞσϦϯάΛମݧ͢Δ

Slide 6

Slide 6 text

εύʔεϞσϦϯά • σʔλʹ಺ࡏ͢ΔεύʔεੑΛԾఆͯ͠ɺࣄ৅ ΛϞσϦϯά͢Δख๏ • ೥ࠒ͔Βݚڀ͞Εɺಛʹը૾ॲཧʹ͓͍ ͯ׆ൃͳٞ࿦͕ͳ͞Ε͍ͯΔ • ࣮ϏδωεͰͷԠ༻͸͜Ε͔Β

Slide 7

Slide 7 text

ྑ͍ͱ͜Ζ • ೖྗಛ௃ྔͷதͷॏཁͳ΋ͷ͕Θ͔Δ • গͳ͍৘ใ͔Βݩͷ৘ใͷ෮ݩ͕Ͱ͖Δ

Slide 8

Slide 8 text

ೖྗಛ௃ྔͷதͷॏཁͳ΋ͷ͕Θ͔Δ

Slide 9

Slide 9 text

ଟ߲ࣜճؼ = −%& + + 観測ノイズ

Slide 10

Slide 10 text

ଟ߲ࣜճؼ ઢܗճؼ աֶशͯ͠Δ

Slide 11

Slide 11 text

ଟ߲ࣜճؼ ઢܗճؼͷ܎਺

Slide 12

Slide 12 text

ଟ߲ࣜճؼ -FBTUBCTPMVUFTISJOLBHFBOETFMFDUJPOPQFSBUPS -BTTP

Slide 13

Slide 13 text

ଟ߲ࣜճؼ -BTTPͷ܎਺

Slide 14

Slide 14 text

ଟ߲ࣜճؼ 0SUIPHPOBM.BUDIJOH1VSTVJU 0.1

Slide 15

Slide 15 text

ଟ߲ࣜճؼ 0.1ͷ܎਺

Slide 16

Slide 16 text

ଟ߲ࣜճؼ from sklearn.linear_model import LinearRegression, Lasso, OrthogonalMatchingPursuit from sklearn.preprocessing import PolynomialFeatures from sklearn.pipeline import make_pipeline poly_preprocess = PolynomialFeatures(poly_dim, include_bias=False) # models linear = LinearRegression() lasso = Lasso(alpha=0.002, max_iter=500000, tol=0.000001) omp = OrthogonalMatchingPursuit(n_nonzero_coefs=5) def fit_and_predict(predictor): model = make_pipeline(poly_preprocess, predictor) model.fit(x.reshape(-1, 1), y) y_predicted = model.predict(x.reshape(-1, 1)) t_predicted = model.predict(t.reshape(-1, 1)) return y_predicted, t_predicted

Slide 17

Slide 17 text

ଟ߲ࣜճؼ • ελʔτ஍఺͸࠷খೋ৐๏ min 1 2 − 0 Z ͕ग़ྗɺX ͸ॏΈɺY ͸ೖྗ ্هΛຬͨ͢ X ΛٻΊΔ໰୊

Slide 18

Slide 18 text

ଟ߲ࣜճؼ • աֶशΛ͚͞ΔͨΊʹਖ਼ଇԽ߲Λ௥Ճ min 1 2 − 0 + 2 ॏΈ X Λখ͘͢͞Δ੍໿Λ͚ͭΔ͜ͱͰաֶशΛ཈੍ -ϊϧϜ -BTTPɾ-ϊϧϜ 3JEHF

Slide 19

Slide 19 text

ଟ߲ࣜճؼ • ຊདྷղ͖͍ͨ -ϊϧϜ࠷దԽ min 1 2 − 0 + & -ϊϧϜ࠷దԽ͸૊߹ͤ࠷దԽ໰୊ /1ࠔ೉ ہॴతʹղ͘ᩦཉΞϧΰϦζϜ͕ .BUDIJOH1VSTVJU΍ *)5 ͳͲ

Slide 20

Slide 20 text

গͳ͍৘ใ͔Βݩͷ৘ใ͕෮ݩͰ͖Δ

Slide 21

Slide 21 text

௿ϥϯΫߦྻ࠶ߏ੒ ΦϦδφϧͷσʔλ

Slide 22

Slide 22 text

௿ϥϯΫߦྻ࠶ߏ੒ ׂͷσʔλ͕ܽଛ ࠇ͍෦෼

Slide 23

Slide 23 text

௿ϥϯΫߦྻ࠶ߏ੒ εύʔεϞσϦϯάʹΑΔิ׬

Slide 24

Slide 24 text

௿ϥϯΫߦྻ࠶ߏ੒ # initial guess X = np.random.rand(*A.shape) # retrieve existing values refill(X) for t in range(self.max_iter): # update threshold in each iteration thresh = self.alpha * (1 - t / self.max_iter) # apply SVD U, S, V = np.linalg.svd(X, full_matrices=False) # apply soft thresholding function to singular values S = soft_thresh(S, thresh) S = np.diag(S) # reconstruct X X = U.dot(S).dot(V) refill(X) return X

Slide 25

Slide 25 text

௿ϥϯΫߦྻ࠶ߏ੒ • ؍ଌ͞Ε͍ͯΔཁૉͷೋ৐࿨Λ࠷খԽ Њ͕؍ଌσʔλͷΠϯσοΫεɺB͕؍ଌσʔλ ্هΛຬͨ͢ 9 Y͸ͦͷཁૉ ΛٻΊΔ໰୊ min 1 2 3 45 − 45 0 4,5∈: s. t 2 <

Slide 26

Slide 26 text

·ͱΊ • εύʔεϞσϦϯάͷγϯϓϧͳྫΛ 1ZUIPO ίʔυͱͱ΋ʹ঺հ • /VNQZ ΍ TDJLJUMFBSOΛ࢖ͬͯͰ͖Δ • ຊ೔ͷ OPUFCPPL • IUUQTHJUJPW/&O

Slide 27

Slide 27 text

উखʹ ࣍ճ༧ࠂ • 1ZUIPOͰ͸͡ΊΔѹॖηϯγϯά • ը૾ॲཧͰͷεύʔεϞσϦϯά • ϊΠζআڈ • ௒ղ૾ • ΠϯϖΠϯςΟϯάͳͲ

Slide 28

Slide 28 text

উखʹ ࣍ճ༧ࠂ • ѹॖηϯγϯάͰʮώήʯ͸আڈͰ͖Δ͔ʁ