為什麼線性回歸之前要做這步驟 MMEncoder.fit_transform(df)?
train_X = MMEncoder.fit_transform(df) <=為什麼線性回歸之前要做這步驟?
estimator = LinearRegression()
cross_val_score(estimator, train_X, train_Y, cv=5).mean()
最後算出的分數表示什麼? 越高越好嗎?
回答列表
-
2020/03/05 下午 09:33Steven Hsu贊同數:2不贊同數:0留言數:0
-
2020/03/05 下午 09:57Matthew Huang贊同數:2不贊同數:0留言數:0
1.
MinMaxScaler
是特徵縮放(Feature scaling)的其中一個方法。特徵縮是是指將數據的各個特徵所依縮放至同一個尺度,以避免某自變量尺度過大而使得其他自變量被忽視,並且有助於模型收斂速度加快。類似的還有Normalizer
、StandardScaler
2. cross_val_score是指交叉驗證,預設狀況下會等價為K折驗證,直接看sklearn官方的第一張圖就知道原理了。HW10範例是指將數據拆五段,各做一次測試,所以會得到五個相應誤差後再取平均。
3.補充一下,如果是做time series課題的人,不能採用K折驗證作為驗證工具,應該採如這篇blog
-
2020/03/05 下午 10:30李子明贊同數:5不贊同數:0留言數:0
我覺得(不見得是對的)目前以類神經為主的機器學習,主要就是找出一個「不同類型的資料的線性組合」的結果,讓這個結果最接近期待中的結果。
那不同類型的資料,要怎樣比較呢?比方「日幣vs美金vs身高vs體重」。
MMEncoder是為了把數據依比例調整到一個固定的範圍中,比如[65535,-32767]之間的值會被調整為[0,1]之間的值,通常是因為
一、距離的上下界(最大值、最小值)是不重要的,
二、但距離之間的關係(2,2,6,8距離關係可以是1:3:4)是重要的
三、不同種類之間的關係能夠有一致性的評量方式
所以對於通常型的模型來說,日幣vs美金vs身高vs體重,這四種不同類型的資料都分別轉成[0,1]之間的值,「這樣子的比較」會比「直接拿原值」來比較更有意義,並且也能更節省機器學習的作業量(提高速度)。
cross_val_score就是另外一個故事了,簡單回答一下,
一、以這個例子來講,進行了五次機器學習,所以有五個推論得到的分數,mean將五個分數取了平均。
二、不是越大越好,這跟你的目標函式的最佳化方向是最大值化還是最小值化有關。
-
2020/03/06 上午 00:38崴崴贊同數:2不贊同數:0留言數:0
cross_val_score中的scoring參數預設是none
所以你是用sklearn.linear_model.LinearRegression預設的score在算分數
預設的score是用R squared,直觀的看法像是MSE的normalized version,
比較容易比較不同scale之間的model,
而cross_val_score(cv=5)給的是5個不同valid set算出來分數的平均
越接近1代表你在這堆sample出來的data上fit的越準
但是不是越高越好要看情況,也有可能只是在training data上overfitting
而且在這個作業中,如果你只是為了提高分數的話
你把data point砍到剩極少,e.g. 只有兩筆,不管怎麼fit score都是1
-
2020/03/06 上午 01:00張維元 (WeiYuan)贊同數:3不贊同數:0留言數:0
嗨,關於你的「最後算出的分數表示什麼? 越高越好嗎?」問題
我們可以直接看 cross_val_score 文件 ,其中說明該計算方法會依照 scoring 計算 cross-validation,預設會以每個模型的 Score 方法回主。接著,可以看 LinearRegression 文件 ,當中的 Score 是 Return the coefficient of determination R^2 of the prediction. 而 cross-validation 指的是「將資料分成 N 等分,取其中 1 份當測試、 N-1 份用來訓練,重複 N 次取平均」,綜合來說,分數越高越好沒錯。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的 GITHUB 帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃