import mglearn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ridge
#設定隨機數種子
rnd = np.random.randomstate(0)
#均值0方差1的正態分佈
x_org = rnd.normal(size=
(1000,3
))w = rnd.normal(size=3)
#泊松分布, lam和size根據傳入array決定
x = rnd.poisson(
10* np.exp(x_org)
)y = np.dot(x_org, w)
#統計各數出現次數
bins = np.bincount(x[:,
0])plt.bar(
range
(len
(bins)
), bins)
plt.ylabel(
)plt.xlabel(
"value"
)plt.show(
)#這種圖形的資料線性模型難以處理
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=0)
score = ridge(
).fit(x_train, y_train)
.score(x_test, y_test)
print
("test score: "
.format
(score)
)#對數變換後, 資料更加對稱, 異常值也減少了
x_train_log = np.log(x_train +1)
x_test_log = np.log(x_test +1)
plt.hist(x_train_log[:,
0], bins=25)
plt.ylabel(
)plt.xlabel(
"value"
)plt.show(
)#此時線性模型準確率提公升
score = ridge(
).fit(x_train_log, y_train)
.score(x_test_log, y_test)
print
("test score: "
.format
(score)
)
分箱、多項式和互動項都對模型在給定資料集上的效能有很大
影響,對於複雜度較低的模型更是這樣,比如線性模型和樸素貝葉斯模型。與之相反,基
於樹的模型通常能夠自己發現重要的互動項,大多數情況下不需要顯式地變換資料。其他
模型,比如 svm、最近鄰和神經網路,有時可能會從使用分箱、互動項或多項式中受益,
但其效果通常不如線性模型那麼明顯
單變數非線性變換
新增特徵的平方或者立方可以改進線性回歸模型,其他的變換通常也對變換某些特徵有用,特別是應用數學函式,如log,exp或sin。雖然基於樹的模型只關注特徵的順序,但線性模型和神經網路依賴於每個特徵的尺度和分布。如果特徵與目標之間存在非線性關係,那麼建模就變得非常困難,特別是對於回歸問題。log和exp...
機器學習基礎 非線性變換
在之前介紹的分類問題中,所涉及的分類的模型都是線性的,在非線性變換這一節中,我們將模型延伸到非線性的情況下來進行資料的分類。我們看到上面的例子,在左圖中,圓圈和紅叉的資料無法用一條直線將其分成兩類,那麼這這個例子中,我們其實可以用乙個大圓圈將資料分類,所以現在我們考慮假設,該假設hsep x 是乙個...
林軒田 12 非線性變換
toc 對於非線性的資料分類,如果我們使用線性模型,就會使得ein很大,分得不好。現在我們考慮如何用二次方程 圓的方式 來進行separate 我們可以使用半徑平方為0.6的圓可以將它分開 這裡我們進行非線性的變換,實現座標系的變換。從x空間變到z空間。在x系裡面圓圈可分的情況在z系裡面變得線性可分...