單變數非線性變換

2021-10-07 02:48:42 字數 1571 閱讀 7806

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系裡面變得線性可分...