# 數據分析
## Python data structure
1. List
2. Tuple
3. Dictionary
4. Set
### List
1. 連續空間
2. 可容納不同資料型態(python array 內存 address(8byte??))
```python=
Empty1=[]
Empty2=list()
Simpsons=[‘home’,3] #異質陣列
Simpsons.append(‘lisa’)(add)
Simpsons.remove(‘’)
Array 表示
Simpsons[0:2] #0->2,頭算尾不算[0][1]
Simpsons[-1] #the last one
Simpsons[::2]
Simpsons[::-1] #倒續
!!!
A=b.sort #此 sort 為物件
A()=b.sort()
Deep copy
A=s.copy()
Shallow copy
A&s 指在同一個 address??給名字
```
### Tuple
1. 值不能修改,不能 append
2. 容納不同資料型態
Digit=(0,1,’two’)
Digit=tuple([0,1,’two’])
3/3
HW1
把 label 變成整數,化成四個元素的 List
Panda 把資料讀進來
分類法: Perceptron Calssification
Gradient decent method
1. Gradient
2. Learning rate
Multiple regrassion
回歸(分類)方式: 四捨五入
把此方法類別化
Multiple Linear Regression
```python=
Import numpy as np
Import pandas as pd
filename=’123.xlsx’
sheetName=’Data’
df=pd.read_excel(filename, sheet_name=sheetName)
X1=np.array(df[‘Fe203’])//1-D array
X=np.column_stack((x1,x2,x3))//紅色部分=>tuple
Model=linearRegression(fit_intercept=Ture)//create a model
Model.socre(x,y)=>loss function
X1Mesh.flatten()//變成一維陣列//row->column
X1,x2=np.meshgrid(x1line,x2line,sparse=false)
X1.imshow(2-D array 只要是網格化的值, cmap=plt.cm.RdYlGn,interpolation=’bilinear’,extent=(x1min,x1max,x2min,x2max))
Polynimal Regression
poly=PolynomialFeatures(1)//多項式階數為 1
x=poly.fit_transform(x[:, np.newaxis])
預測資料走向
N=1=>underfitting 欠擬合 無視其他資料,單一走向
N=10=>overfitting 過擬合 過度預測,不確定走向是否正確
```
---
## CH4
### Support Vector Machine(SVM)
先決定SH,再決定OSH(離SH最遠距)
SH分別為方程式=-1 or 1
所以左邊群<-1
右邊群>1
epsilon會決定underfitting or overfitting
### 算最小值
loss function/cost function
### 算最大值
### Kernal SVM
將原本資料投影到另一個維度上
r=1/2$l^2$
r越小=>影響範圍大(underfitting)
r越大 or c值越大=>影響範圍小(overfitting)
### Decision Tree決策樹
去找information gain高的
缺點很容易over fitting
### Ramdom forest
修正了DT的缺點
先隨機把樣本分群,分別做分類(sub group),再取平均
B值用來分群,可用經驗公式做設定
### K-nearest Neighbors (KNN)
用距離最近的K個點投票決定是哪一類
沒有acc 很慢
---
## Ch5
Probability vs Likelihood
predict_proba
### Naive Bayes Classifier
* Bayes Theorem
P(A,B) = P(B|A)P(A)
Likelihood:
P(X|Y):given X 的情況下 Y 是多少
### Gaussian Naïve Bayes
y=0 & y=1是independant
X: 一個高斯分布
公式與covarience、RBF很像
**[觀念不同]**
GPR: X跟Y都是高斯分布(Base on kernal function合成一個高斯分布)
Gaussian NB: 每個類別有獨立高斯分布,可以創造新的dataset
---
### HW5
A. 將砷濃度以5 ppb與10 ppb為分界,分為0、1、2類。
B. 利用logistic regression方法進行分類。
C. 使用leave one out方法進行cross validation
D. 針對logistic regression方法中之C值,進行cross validation分析,選擇最佳C值參數。
先排除很多零的欄位
### HW6
A. python list 為一維陣列架構,要用numpy拿
B. 二微陣列架構: Numpy & Pandas dataframe
C. enter、exit每個class皆有此函數,可以overriding
D. with open("test.txt") as file:
file離開迴圈後會被回收,不用close
E. numpy.unique
F. set沒有順序,所以加sorted
G. sum(list, []) => flatten(np)
H.
* map=>初始大小等同結果大小
* filter=>結果大小少於初始大小
* reduce=>結果剩一個
* for判斷式if放前面=>初始大小等同結果大小
* for判斷式if放後面=>結果大小少於初始大小
## PPT6
如何減少維度:
1. PCA
2. PPT5
http://www.taroballz.com/2018/07/06/ML_DecreaseFeature/
### PCA
只要4個component,其他不會顯示
找最大component
找eigenvector、eigenvalue
**Principle component 個數選擇不同,答案一樣**
det(A-lymdaI)=0
原始數據如何轉成A:
1. Peason correlation coefficient(優先)
2. Covarience matrix
用scipy可以算簡單統計
### FA
只要4個component,其他不要
找最大component
找eigenvector、eigenvalue
**Principle component 個數選擇不同,答案不同**
4/26
PCA
explained_varience=>eigenvalue
components_.T=>eigenvector
fig, ax = plt.subplots(1,2)=>要先創一個fig
(a,b) = (c,d)
a = (c,d)
a,b = c,d,e => a,b = c,(d,e)
K-Mean
透過數據間的距離分群
容易絕對的分類,而不是相對
要決定分幾類(才能慎選center)
### GMM
有資料沒有被分配的可能性