# Statistics --- 0704 台大資管營 皇甫立翔.李惟慈 --- * Outline * 函數 * 何謂統計 * 假設檢定 * 迴歸分析 * 套件、函式庫與Scikit-learn * 程式練習 --- ## 函數(function) ---- 什麼是函數?跟方程式一樣嗎? 方程式:y = f(x) = ax + b --> 這是函數嗎? ---- ![](https://i.imgur.com/Xap399A.png) ---- ### 定義一個function叫做add() ### 將兩個數字放進去,使他們相加,得到答案 ### y = f(a, b) = add(a, b) = a + b ---- ```python= def add(a, b): return (a + b) ``` ```python= c = add(99, 13) print(c) ``` --- ## 什麼是統計? ---- * 算數平均數? * 變異數? * 標準差? ---- * 一門科學 * 分析隨機現象 * 敘述統計 * 推論統計 * 一句話解釋:「對資料數據進行收集並分析」 ---- * (一) 社會統計(Social Statistics) * 專注在議題的分析 * 分析後的解釋 * 改善或更好的解決辦法 ---- * (二) 統計學習(Statistical Learning) * 類似於機器學習 * 著重在數學機率模型的運用 * 利用有規則的數學方法去做分析 * 在乎結果,但更關心變數(特徵)的影響力與交互作用 * 注重可解釋性 * ex. 迴歸、分類、視覺化、高斯過程 ---- * 機器學習(Machine Learning) * 機器學習是人工智慧的一個分支 * 利用不規則的方法與海量資料,找出數據之間的潛在規則,得到預測結果 * 不關心過程,只在乎結果 * 不依賴假設,不在乎是否能解釋 --> 效果非常好 * 但是,沒有統計學,機器學習根本不會存在 * ex. 語音處理、影像分析、神經網路、深度學習 ---- ### 不過呢,今天的重點不是機器學習。 * 透過基本的迴歸模型來做一些簡單的分析與預測 --- ## 假設檢定 https://reurl.cc/dvQWg --- ## Numpy * Numpy 是一個 Python上非常重要的套件(函式庫) * 對於資料分析而言是極度重要的 * 運算速度非常快 ---- ### example ```python= import numpy as np ``` * 算總和 --> np.sum(x) * 算平均 --> np.mean(x) * 找最大 / 最小 --> np.max(x) / np.min(x) --- ## 迴歸分析(Regression) * 什麼是迴歸? * 迴歸是一種分析方法,探討多個變數之間的關聯性、關聯方向及強度 * 用來建立數學模型以進行預測分析 ---- ### 最基礎的迴歸模型 -- 線性迴歸 * Called "Linear Regression". * 顧名思義,線性迴歸就是一條線的樣子 * 什麼意思呢? ---- ![](https://i.imgur.com/EtEZK6y.png) * 藍色代表資料點 * 紅色代表迴歸線 --- ## 相關係數(Coefficient of Correlation) * 表示兩個變數之間相關的程度 * -1 <= r <= 1 * 相關係數 = 1 --> 兩者呈現完全正相關 * 相關係數 = 0 --> 兩者無相關 * 相關係數 = -1 --> 兩者呈現完全負相關 ---- ## Coding Practice 1 ### 找出相關係數 ---- Step 1. 讀取 pickle 檔裡面的資料, 並把 X, Y 座標資料分開存取 請到這裡下載pickle檔: https://drive.google.com/open?id=1aawWKESopK4JIMPte0Kow2drg4-6nfp2 https://reurl.cc/jELK2 ```python= import numpy as np import pickle with open('data_x.pkl', 'rb') as f1: x = pickle.load(f1) with open('data_y.pkl', 'rb') as f2: y = pickle.load(f2) ``` https://reurl.cc/oMWnQ ---- ```python= x = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]) y = np.array([ 1. , 7.57850326, 11.36952195, 4. , -1.52484843, 10.09314262, 7. , -5.11699724, 9. , 5.90729428, 17.06232036, 15.01201528, 13. , 14. , 14.8093925 , -2.26544191, 13.41740757, 42.49782027, 27.69556116, 41.67004682, -4.32895862, 16.03924198, 23. , 30.96971771, 36.73588139, 34.1090894 , 22.04964984, 18.53873962, 37.47631801, 18.77088163, 20.63872425, 33.52188797, 33. , 36.96156413, 26.50037747, 47.20061424, 37.84991737, 37.07440717, 39. , 44.54735716, 40.38716479, 48.27360077, 24.97715623, 41.50501424, 45. , 47.84398481, 39.22394682, 26.55566921, 35.19300604, 57.42083475]) ``` ---- ```python= x_test = np.array([51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80]) ``` ---- Step 2. 利用現成的函數,求出相關係數 ```python= np.corrcoef(x, y) ``` --- ### 迴歸線長這樣: ### $$ y = \beta_0 + \beta_1x_1 + \beta_2x_2... + \beta_nx_n $$ ---- ### 單一變數的迴歸 ### $$ y = \beta_0 + \beta_1x $$ ---- ### 公式 ### $$ y = \beta_0 + \beta_1x $$ ---- $$ \hat\beta_0 = \bar y - \hat\beta_1 \bar x $$ <br> $$ \hat\beta_1 = \dfrac{ \sum^n_{i=1}(y_i- \bar y)(x_i- \bar x) }{ \sum^n_{i=1}(x_i- \bar x)^2 } $$ --- ## Coding Practice 2 ### 練習找出迴歸線 ---- Step 1. 利用之前讀取的 X, Y 資料, 以及迴歸線公式,找出係數 提示:想找平均,可以利用 ```python= np.mean() ``` ---- Step 2. 利用 X 測試資料, 預測他們的 Y 會是多少 ```python= with open('x_test.pkl', 'rb') as ft: x_test = pickle.load(ft) y_predict = beta1 * x_test + beta0 ``` --- ## 評估(Evaluation) * 評估是什麼? * 評估就是針對我們建立出來的模型,去做一個好壞的評斷 * 為什麼要做這件事? * 當然要做評估囉,這樣才能確定這麼模型是不是好的 * 如果是個好模型,就可以繼續用下去 * 如果是個很爛的,就要捨棄或是改善它 ---- ### Sum of Squared Total(SST) ### Sum of Squared Residual(SSR) ### Sum of Squared Error(SSE) ---- ### $$ R^2 $$ ### $$ adjust \ R^2 $$ ---- ## SST = SSR + SSE ![](https://i.imgur.com/zemG4Rh.png) ---- SST = 總差值 SSR = 可以用迴歸線解釋的部分 SSE = 無法用迴歸線解釋的部分 ---- $$ R^2 = \dfrac{SSR}{SST} $$ * 意義:這些資料的___%可以被這個迴歸模型解釋 * 代表了模型的精準度 * adjust R Squared 是在某些情況下,針對 R squared 進行微調 --- ## 套件(Package)與函式庫(Library) What the hell are they? ---- 套件、函式庫,兩者其實是類似的東西。 * 一個別人幫你寫好的包裹 * 裡面可能有各式各樣好用的工具,能讓你輕易使用,並快速達到你的需求 * 不同點在於,不同程式語言習慣不同的叫法 * Python 稱之為套件 * C++、R、JavaScript 稱之為函式庫 --- ## Scikit-learn * 簡稱 Sklearn ---- Sklearn 在 Python中提供大量的機器學習演算法, 以及其他許多實用的資料集 ---- 我們今天要使用的是裡面其中的一項工具, 叫做"LinearRegression" 那麼如何使用這個套件呢? ---- ```python= from sklearn.linear_model import LinearRegression ``` --- ## Coding Practice 3 利用 Sklearn 建立迴歸模型 ```python= regression = LinearRegression() x = x.reshape(-1, 1) regression.fit(x, y) x_test = x_test.reshape(-1, 1) y_predict2 = regression.predict(x_test) ``` --- ## Coding Practice 4 利用 Sklearn 算出 R Squared ```python= regression.score(x, y) ``` --- ## 課程結束~~~(撒花
{"metaMigratedAt":"2023-06-14T21:42:06.904Z","metaMigratedFrom":"Content","title":"Statistics","breaks":true,"contributors":"[{\"id\":\"5136674e-54aa-478e-a7e3-a88c9f553f95\",\"add\":6731,\"del\":1499}]"}
    747 views