# Statistics
---
0704 台大資管營
皇甫立翔.李惟慈
---
* Outline
* 函數
* 何謂統計
* 假設檢定
* 迴歸分析
* 套件、函式庫與Scikit-learn
* 程式練習
---
## 函數(function)
----
什麼是函數?跟方程式一樣嗎?
方程式:y = f(x) = ax + b --> 這是函數嗎?
----

----
### 定義一個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".
* 顧名思義,線性迴歸就是一條線的樣子
* 什麼意思呢?
----

* 藍色代表資料點
* 紅色代表迴歸線
---
## 相關係數(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

----
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}]"}