#mynavi(µ¡³£³Ø½¬¤Î°Ù¤Î¿ô³Ø¤Î´ðÁÃ) #setlinebreak(on); #html(<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>) * Ìܼ¡ [#d8db4f2c] #contents - ´ØÏ¢ -- [[µ¡³£³Ø½¬¤Î°Ù¤Î¿ô³Ø¤Î´ðÁÃ]] -- [[Python³Ð¤¨½ñ¤]] -- [[IPython¤Î»È¤¤Êý¥á¥â]] -- [[numpyÆþÌç]] -- [[pandasÆþÌç]] -- [[matplotlib¤Ç¥°¥é¥ÕºîÀ®]] -- [[scikit-learn¤ò»ÈÍѤ·¤¿½Å²óµ¢Ê¬ÀÏ]] -- [[ChainerÆþÌç]] -- [[Chainer¤Ç½Å²óµ¢Ê¬ÀϤò¤ä¤Ã¤Æ¤ß¤ë]] * ³µÍ× [#g644cbdc] #html(<div style="padding-left: 10px;">) ¤³¤³¤Ç¤Ï¡¢ºÇµÞ¹ß²¼Ë¡¤ò»ÈÍѤ·¤Æ½Å²óµ¢Ê¬ÀϤò½ÐÍè¤ë¤À¤±¥é¥¤¥Ö¥é¥êÅù¤ò»ÈÍѤ»¤º¤Ë¥¹¥¯¥é¥Ã¥Á¤Ç¼ÂÁõ¤·¤Æ¤ß¤ë¡£ #html(</div>) * ¥â¥Ç¥ë¼° [#ff473705] #html(<div style="padding-left: 10px;">) #html(){{ ñ²óµ¢Ê¬ÀϤΥâ¥Ç¥ë¼°¤¬¡¡ <math> <mover><mo>y</mo><mo>^</mo></mover> <mo>=</mo> <msub><mo>w</mo><mi>1</mi></msub> <mo>x</mo> <mo>+</mo> <msub><mo>w</mo><mi>0</mi></msub> </math> ¡¡¤Ç¤¢¤ë¤Î¤ËÂФ·¤Æ¡¢ }} #html(){{ <div> ÆÃħÎ̤¬Ê£¿ô¤¢¤ë½Å²óµ¢Ê¬ÀϤξì¹ç¤Î¥â¥Ç¥ë¼°¤Ï¡¡ <math> <mover><mo>y</mo><mo>^</mo></mover> <mo>=</mo> <msub><mo>w</mo><mi>1</mi></msub> <msub><mo>x</mo><mi>1</mi></msub> <mo>+</mo> <msub><mo>w</mo><mi>2</mi></msub> <msub><mo>x</mo><mi>2</mi></msub> <mo>+</mo> <msub><mo>w</mo><mi>0</mi></msub> <msub><mo>x</mo><mi>0</mi></msub> </math> ¡¡¤È¤Ê¤ë¡£¡Ê ¹ÔÎó·×»»ÍÑ¤Ë <math><msub><mo>x</mo><mi>0</mi></msub><mo>=</mo><mi>1</mi></math> ¤È¤¹¤ë ¡Ë </div> }} °Ê²¼¤Î¤è¤¦¤Ê¥Ç¡¼¥¿¤¬¤¢¤ë»þ¡¢ | x1 | x2 | y |h | 70 | 68 | 87 | | 75 | 82 | 86 | | 80 | 71 | 93 | #html(){{ <div style="padding: 10px 0;"> 1¹ÔÌÜ¤Ï <math> <mover><mo>y</mo><mo>^</mo></mover> <mo>=</mo> <msub><mo>w</mo><mi>1</mi></msub> <mo>*</mo> <mi>70</mi> <mo>+</mo> <msub><mo>w</mo><mi>2</mi></msub> <mo>*</mo> <mi>68</mi> <mo>+</mo> <msub><mo>w</mo><mi>0</mi></msub> <mo>*</mo> <mi>1</mi> </math> ¤È¤Ê¤ê¡¢ </div> °Ê²¼¤Î¹ÔÎó·×»»¤Ç <math><mover><mo>y</mo><mo>^</mo></mover></math> ¤òµá¤á¤ë»ö¤¬¤Ç¤¤ë¡£ <div style="padding: 10px 0;"> <math> <mfenced open="[" close="]"> <mtable> <mtr><mtd><mn>70</mn></mtd><mtd><mn>68</mn></mtd><mn>1</mn></mtd></mtr> <mtr><mtd><mn>75</mn></mtd><mtd><mn>82</mn></mtd><mn>1</mn></mtd></mtr> <mtr><mtd><mn>80</mn></mtd><mtd><mn>71</mn></mtd><mn>1</mn></mtd></mtr> </mtable> </mfenced> <mfenced open="[" close="]"> <mtable> <mtr><mtd><mn><msub><mo>w</mo><mi>1</mi></msub></mn></mtd></mtr> <mtr><mtd><mn><msub><mo>w</mo><mi>2</mi></msub></mn></mtd></mtr> <mtr><mtd><mn><msub><mo>w</mo><mi>0</mi></msub></mn></mtd></mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open="[" close="]"> <mtable> <mtr><mtd><mi>70</mi><mo>*</mo><msub><mo>w</mo><mi>1</mi></msub><mo>+</mo><mi>68</mi><mo>*</mo><msub><mo>w</mo><mi>2</mi></msub><mo>+</mo><mi>1</mi><mo>*</mo><msub><mo>w</mo><mi>0</mi></msub></mtd></mtr> <mtr><mtd><mi>75</mi><mo>*</mo><msub><mo>w</mo><mi>1</mi></msub><mo>+</mo><mi>82</mi><mo>*</mo><msub><mo>w</mo><mi>2</mi></msub><mo>+</mo><mi>1</mi><mo>*</mo><msub><mo>w</mo><mi>0</mi></msub></mtd></mtr> <mtr><mtd><mi>80</mi><mo>*</mo><msub><mo>w</mo><mi>1</mi></msub><mo>+</mo><mi>71</mi><mo>*</mo><msub><mo>w</mo><mi>2</mi></msub><mo>+</mo><mi>1</mi><mo>*</mo><msub><mo>w</mo><mi>0</mi></msub></mtd></mtr> </mtable> </mfenced> </math> </div> ¤³¤Î°Ù¡¢ÆÃħÎ̤ιÔÎó¤òX¡¢¥Ñ¥é¥á¡¼¥¿¤Î¹ÔÎó¤òW¤È¤·¤¿¾ì¹ç¡¢°Ê²¼¤Î¥â¥Ç¥ë¼°¤Çɽ¤¹»ö¤¬½ÐÍè¤ë¡£ <div style="padding: 10px 0;"> <math> <mover><mo>y</mo><mo>^</mo></mover> <mo>=</mo> <mo>X</mo> <mo>W</mo> </math> </div> }} #html(</div>) // ¥â¥Ç¥ë¼° * ¥³¥¹¥È´Ø¿ô [#u868c2e4] #html(<div style="padding-left: 10px;">) ¥³¥¹¥È´Ø¿ô¤Ï°Ê²¼¤ÎÄ̤ꡣ #html(){{ <div> <math> <mrow> <mo>j</mo><mo>(</mo><mo>W</mo><mo>)</mo> <mo>=</mo> </mrow> <mfrac><mi>1</mi><mo>2m</mo></mfrac> <munderover><mi>∑</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></munderover> <msup><mrow><mo>(</mo> <mover><mi>y</mi><mo>^</mo></mover> <mo>-</mo> <msub><mi>y</mi><mi>i</mi></msub> <mo>)</mo> </mrow><mi>2</mi></msup> <mo>=</mo> <mfrac><mi>1</mi><mo>2m</mo></mfrac> <msup> <mrow><mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo></mrow> <mo>T</mo> </msup> <mrow><mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo></mrow> </math> </div> }} #html(</div>) // ¥³¥¹¥È´Ø¿ô * ºÇµÞ¹ß²¼Ë¡ [#g528f800] #html(<div style="padding-left: 10px;">) ºÇµÞ¹ß²¼Ë¡¡Ê¥Ù¥¯¥È¥ë²½¡Ë¤Î¥â¥Ç¥ë¼°¤Ï°Ê²¼¤ÎÄ̤ꡣ #html(){{ <div> <math> <mo>W</mo> <mo>:=</mo> <mo>W</mo> <mo>-</mo> <mo>¦Á</mo> <mfrac><mo>1</mo><mo>m</mo></mfrac> <msup><mo>X</mo><mo>T</mo></msup> <mo>(</mo><mo>XW</mo><mo>-</mo><mo>y</mo><mo>)</mo> </math> </div> }} #html(</div>) // ºÇµÞ¹ß²¼Ë¡ * Àµµ¬²½ [#n73377f0] #html(<div style="padding-left: 10px;">) ÆÃħÎ̤ÎÈϰϤ¬Î󤴤Ȥ˰ۤʤë¾ì¹ç¡¢¥Ç¡¼¥¿¤òÀµµ¬²½¤¹¤ë»ö¤Ë¤è¤Ã¤Æ¡¢Àµ¤·¤¯Ê¬ÀϤò¹Ô¤¦»ö¤¬¤Ç¤¤ë¡£ ** z-socre Normalization (ɸ½à²½) [#j3f49df1] #html(<div style="padding-left: 10px;">) Ê¿¶Ñ¤¬0¡¢É¸½àÊк¹¤¬1¤È¤Ê¤ë¤è¤¦¤ËÄ´À°¤¹¤ë¡£ #html(){{ <div style="padding-bottom: 10px;"> <math> <msub><mo>x</mo><mi>1</mi></msub> <mo>=</mo> <mfrac> <mrow><msub><mo>x</mo><mi>1</mi></msub><mo>-</mo><msub><mo>x</mo><mi>mean</mi></msub></mrow> <msub><mo>x</mo><mi>std</mi></msub> </mfrac> </math> </div> }} #html(</div>) // z-socre Normalization ** min-max normalization [#o4c1e2e1] #html(<div style="padding-left: 10px;">) ºÇÂçÃͤ¬1ºÇ¾®Ãͤ¬0¤È¤Ê¤ë¤è¤¦¤ËÄ´À°¤¹¤ë¡£ #html(){{ <div> <math> <msub><mo>x</mo><mi>1</mi></msub> <mo>=</mo> <mfrac> <mrow><msub><mo>x</mo><mi>1</mi></msub><mo>-</mo><msub><mo>x</mo><mi>mean</mi></msub></mrow> <mrow><msub><mo>x</mo><mi>max</mi></msub><mo>-</mo><msub><mo>x</mo><mi>min</mi></msub></mrow> </mfrac> </math> </div> }} #html(</div>) // min-max normalization #html(</div>) // Àµµ¬²½ * ¥µ¥ó¥×¥ë¼ÂÁõ [#ddf2ff35] #html(<div style="padding-left: 10px;">) °Ê²¼¤Î¥Ç¡¼¥¿¤«¤é¡¢Ç¤°Õ¤ÎÉô²°ÌÌÀѤÈÃÛǯ¿ô¤Î»þ¤Ë²ÈĤ¬¤¤¤¯¤é¤Ë¤Ê¤ë¤«¤ò¡¢½Å²óµ¢Ê¬ÀϤò»ÈÍѤ·¤Æ¿äÏÀ¤¹¤ë½èÍý¤ò¼ÂÁõ¤¹¤ë¡£ |ÌÌÀÑ|ÃÛǯ¿ô|²ÈÄÂ|h |40.24|7|6.2| |72.48|4|9.3| |72.48|4|9.3| |43.85|0|7.5| |88.33|0|13.3| ¢¨ &ref(sample_rent1.csv); sample_rent1.py #mycode2(python){{ """½Å²óµ¢Ê¬ÀÏ¥µ¥ó¥×¥ë.""" import numpy as np import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def normalize(X, data=None): """Àµµ¬²½(Z-score normalization).""" data = X if data is None else data m = data.shape[0] X_norm = np.zeros((data.shape[0], data.shape[1])) for i in range(data.shape[1]): X_norm[:, i] = (data[:, i] - float(np.mean(X[:, i]))) / float(np.std(X[:, i])) # x0¤òÄɲà X_norm = np.column_stack([np.ones([m,1]), X_norm]) return X_norm def cost(x, y, w): """¥³¥¹¥È´Ø¿ô.""" xw = x.dot(w) return np.dot((xw - y).T, (xw - y)) / (2*m) # ¤â¤·¤¯¤Ï #diff = np.power((x.dot(w) - y), 2) #return diff.sum(axis=0) / (2 * len(y)) def gradient_descent(x, y, w, alpha, iter_num): """ºÇµÞ¹ß²¼Ë¡.""" m = len(y) costs = np.zeros((iter_num, 1)) for i in range(iter_num): w = w - alpha * (1.0/m) * np.transpose(x).dot(x.dot(w) - y) costs[i] = cost(x, y, w) return w, costs if __name__ == "__main__": # -------------------------- # ºÇµÞ¹ß²¼Ë¡¤Ë¤è¤ë½Å²óµ¢Ê¬ÀÏ # -------------------------- # ¥Ç¡¼¥¿Æɤ߹þ¤ß data = np.loadtxt("data/sample_rent1.csv", delimiter=",", skiprows=1) x = data[:, 1:3] y = data[:, 3:4] # ¥Ç¡¼¥¿¤Î¸Ä¿ô m = len(y) # Àµµ¬²½¤·¡¢x0¤òÄɲà X_norm = normalize(x) # ½é´üÃÍ w_int = np.zeros((3, 1)) # ³Ø½¬Î¨ alpha = 0.01 # ³Ø½¬²ó¿ô iter_num = 1000 # ºÇµÞ¹ß²¼Ë¡¤Ë¤è¤ëʬÀÏ¤Î¼Â¹Ô w, costs = gradient_descent(X_norm, y, w_int, alpha, iter_num) # -------------------------- # ºîÀ®¤·¤¿¥â¥Ç¥ë¤ò»ÈÍѤ·¤ÆÊ̤Υǡ¼¥¿¤òͽ¬¤·¤Æ¤ß¤ë # -------------------------- z = np.array([[60, 10], [50, 10], [40, 10]]) result = normalize(x, z).dot(w) for i in range(z.shape[0]): print("¹¤µ: {}Ö, ÃÛǯ¿ô: {}ǯ ¢â {:0.1f}Ëü±ß".format(z[i,0], z[i,1], result[i,0])) # -------------------------- # ¥°¥é¥Õɽ¼¨ # -------------------------- fig = plt.figure(figsize=(10, 5)) # 3D¥°¥é¥Õ ax = fig.add_subplot(1, 2, 1, projection='3d') ax.scatter(data[:, 1], data[:, 2], data[:, 3], color="#ef1234") ax.set_xlabel("Size") ax.set_ylabel("Age") ax.set_zlabel("Rent") # ³Ø½¬Ëè¤Î¥³¥¹¥È ax2 = fig.add_subplot(1, 2, 2) ax2.plot(range(costs.size), costs[:, 0], "r") ax2.set_xlabel("iterations") ax2.set_ylabel("cost") ax2.grid(True) plt.show() }} ·ë²Ì #myterm2(){{ ¹¤µ: 60Ö, ÃÛǯ¿ô: 10ǯ ¢â 8.1Ëü±ß ¹¤µ: 50Ö, ÃÛǯ¿ô: 10ǯ ¢â 7.2Ëü±ß ¹¤µ: 40Ö, ÃÛǯ¿ô: 10ǯ ¢â 6.3Ëü±ß }} &ref(sample_rent1.png); #html(</div>)