對(duì)于多元多項(xiàng)式回歸:

關(guān)鍵有3點(diǎn)

  1. 防止過(guò)擬合: 高次項(xiàng)的引入可能導(dǎo)致過(guò)擬合,因此需要謹(jǐn)慎選擇多項(xiàng)式的次數(shù)。
  2. 選擇最佳次數(shù): 可以使用交叉驗(yàn)證或?qū)W習(xí)曲線來(lái)選擇最合適的多項(xiàng)式次數(shù)。
  3. 特征縮放:?在使用多項(xiàng)式回歸前,通常需要進(jìn)行特征縮放,確保不同特征的尺度一致。

2. 變換方法(對(duì)數(shù)變換等)

變換方法通過(guò)對(duì)原始數(shù)據(jù)進(jìn)行某種數(shù)學(xué)變換,使數(shù)據(jù)更符合線性關(guān)系。對(duì)數(shù)變換是其中一種常見(jiàn)的方法,尤其適用于數(shù)據(jù)呈指數(shù)增長(zhǎng)的情況。

對(duì)數(shù)變換:

關(guān)鍵有2點(diǎn):

  1. 對(duì)數(shù)變換的條件: 適用于正數(shù)數(shù)據(jù),特別是在數(shù)據(jù)存在指數(shù)增長(zhǎng)趨勢(shì)時(shí)。
  2. 恢復(fù)變換后的預(yù)測(cè)值: 對(duì)數(shù)變換后的預(yù)測(cè)值需要通過(guò)指數(shù)函數(shù)進(jìn)行逆變換,以獲得原始的預(yù)測(cè)值。 

注意點(diǎn)和一些建議:

  1. 探索性數(shù)據(jù)分析(EDA): 在應(yīng)用多項(xiàng)式回歸或變換方法前,進(jìn)行探索性數(shù)據(jù)分析以了解數(shù)據(jù)的分布和特性。
  2. 嘗試不同方法: 在處理非線性關(guān)系時(shí),嘗試多項(xiàng)式回歸和變換方法,并根據(jù)模型性能選擇最適合的方法。
  3. 注意異常值: 非線性關(guān)系的發(fā)現(xiàn)可能受到異常值的影響,因此在進(jìn)行建模前要處理異常值。
  4. 模型評(píng)估: 使用適當(dāng)?shù)脑u(píng)估指標(biāo)(如均方誤差、R平方等)來(lái)評(píng)估模型性能,確保選擇的方法在測(cè)試數(shù)據(jù)上也表現(xiàn)良好。

總體而言,當(dāng)數(shù)據(jù)關(guān)系非線性時(shí),多項(xiàng)式回歸和變換方法是常見(jiàn)的處理手段,但在使用它們時(shí)需要謹(jǐn)慎選擇并進(jìn)行適當(dāng)?shù)?a href="http://www.dlbhg.com/wiki/what-is-a-large-model-understand-the-basic-concepts-of-ai/">模型評(píng)估。

如果有問(wèn)題,評(píng)論區(qū)可以繼續(xù)探討~

# 區(qū)分L1和L2正則化

下面聊一聊,大家一起深入了解它們的區(qū)別和對(duì)回歸模型的影響。

1. 區(qū)別

a. 正則化項(xiàng)的形式:

L2正則化(嶺回歸):?使用的是模型參數(shù)的平方和的平方根(L2范數(shù))作為正則化項(xiàng)。

b. 特征選擇:

c. 解的穩(wěn)定性:

2. 影響回歸模型的方式

a. 參數(shù)收縮:

b. 模型復(fù)雜度:

3. 注意點(diǎn)和一些建議

  1. 超參數(shù)調(diào)整: 選擇合適的正則化強(qiáng)度參數(shù)((\lambda))很重要,通常通過(guò)交叉驗(yàn)證來(lái)確定。
  2. 問(wèn)題特征:?根據(jù)問(wèn)題特征的性質(zhì)選擇正則化方法。如果認(rèn)為只有少數(shù)特征對(duì)問(wèn)題有貢獻(xiàn),可以考慮使用L1正則化(LASSO)。
  3. 綜合考慮: 有時(shí)候,也可以同時(shí)使用L1和L2正則化,稱為彈性網(wǎng)絡(luò)(Elastic Net),以綜合利用它們的優(yōu)勢(shì)。

總的來(lái)說(shuō),L1和L2正則化是在回歸模型中用于控制模型復(fù)雜度的有效手段,選擇取決于具體問(wèn)題和數(shù)據(jù)的性質(zhì)。

# 學(xué)習(xí)曲線和驗(yàn)證曲線的解讀

下面我會(huì)分別介紹學(xué)習(xí)曲線驗(yàn)證曲線,并說(shuō)明它們能告訴我們的信息以及如何根據(jù)它們來(lái)調(diào)整模型參數(shù)。

學(xué)習(xí)曲線

學(xué)習(xí)曲線(Learning Curve)是一種用于分析模型性能的圖表,它展示了訓(xùn)練數(shù)據(jù)大小與模型性能之間的關(guān)系。通常,學(xué)習(xí)曲線會(huì)隨著訓(xùn)練數(shù)據(jù)量的增加而變化。學(xué)習(xí)曲線的兩個(gè)關(guān)鍵指標(biāo)是訓(xùn)練集上的性能和驗(yàn)證集上的性能。

學(xué)習(xí)曲線能告訴我們的信息:

如何根據(jù)學(xué)習(xí)曲線調(diào)整模型參數(shù):

驗(yàn)證曲線

驗(yàn)證曲線(Validation Curve)是一種圖表,用于分析模型性能與某一參數(shù)(例如正則化參數(shù)、模型復(fù)雜度等)之間的關(guān)系。通過(guò)在不同參數(shù)取值下評(píng)估模型的性能,我們可以找到最優(yōu)的參數(shù)取值。

驗(yàn)證曲線能告訴我們的信息:

如何根據(jù)驗(yàn)證曲線調(diào)整模型參數(shù):

這里,用代碼演示了使用學(xué)習(xí)曲線和驗(yàn)證曲線來(lái)評(píng)估回歸模型,并調(diào)整模型參數(shù),可以作為參考~

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import learning_curve, validation_curve

# 生成隨機(jī)回歸數(shù)據(jù)
X, y = make_regression(n_samples=1000, n_features=20, noise=0.2, random_state=42)

# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定義線性回歸模型
estimator = LinearRegression()

def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None, n_jobs=None, train_sizes=np.linspace(.1, 1.0, 5)):
plt.figure()
plt.title(title)
if ylim is not None:
plt.ylim(*ylim)
plt.xlabel("Training examples")
plt.ylabel("Score")
train_sizes, train_scores, test_scores = learning_curve(estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
plt.grid()

plt.fill_between(train_sizes, train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std, alpha=0.1,
color="r")
plt.fill_between(train_sizes, test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std, alpha=0.1, color="g")
plt.plot(train_sizes, train_scores_mean, 'o-', color="r",
label="Training score")
plt.plot(train_sizes, test_scores_mean, 'o-', color="g",
label="Cross-validation score")

plt.legend(loc="best")
return plt

def plot_validation_curve(estimator, title, X, y, param_name, param_range, cv=None, scoring=None):
train_scores, test_scores = validation_curve(
estimator, X, y, param_name=param_name, param_range=param_range,
cv=cv, scoring=scoring)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)

plt.title(title)
plt.xlabel(param_name)
plt.ylabel("Score")
plt.ylim(0.0, 1.1)
lw = 2
plt.plot(param_range, train_scores_mean, label="Training score",
color="darkorange", lw=lw)
plt.fill_between(param_range, train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std, alpha=0.2,
color="darkorange", lw=lw)
plt.plot(param_range, test_scores_mean, label="Cross-validation score",
color="navy", lw=lw)
plt.fill_between(param_range, test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std, alpha=0.2,
color="navy", lw=lw)
plt.legend(loc="best")
return plt

# 使用示例
plot_learning_curve(estimator, "Learning Curve", X_train, y_train, cv=5)
plt.show()

在這段代碼中,我們首先定義了一個(gè)線性回歸模型?LinearRegression(),然后將其傳遞給了?plot_learning_curve?函數(shù)。這樣就可以成功繪制學(xué)習(xí)曲線了。

# 非線性回歸模型的例子

下面我介紹幾種常見(jiàn)的非線性回歸模型,并與線性回歸進(jìn)行對(duì)比。這樣可以更容易理解。

1. 多項(xiàng)式回歸

多項(xiàng)式回歸是一種將自變量的高次項(xiàng)加入模型的方法,例如:

這與線性回歸的不同之處在于,自變量??的冪次不僅限于一次。通過(guò)增加高次項(xiàng),模型能夠更好地?cái)M合非線性關(guān)系。

2. 指數(shù)回歸

指數(shù)回歸是一種通過(guò)指數(shù)函數(shù)來(lái)建模的方法,例如:

這種模型表達(dá)了因變量隨自變量呈指數(shù)增長(zhǎng)或指數(shù)衰減的趨勢(shì)。

3. 對(duì)數(shù)回歸

對(duì)數(shù)回歸是一種通過(guò)對(duì)自變量或因變量取對(duì)數(shù)來(lái)建模的方法,例如:

或者

這種方法適用于當(dāng)數(shù)據(jù)呈現(xiàn)出指數(shù)增長(zhǎng)或衰減的趨勢(shì)時(shí)。

4. 廣義可加模型(Generalized Additive Models, GAM)

GAM 是一種更一般化的非線性回歸模型,它使用非線性函數(shù)來(lái)擬合每個(gè)自變量,例如:

這里的  是非線性函數(shù),可以是平滑的樣條函數(shù)或其他靈活的函數(shù)形式。

這些非線性回歸模型與線性回歸的主要不同之處在于它們?cè)试S了更加靈活的自變量和因變量之間的關(guān)系。線性回歸假設(shè)了自變量和因變量之間的關(guān)系是線性的,而非線性回歸模型通過(guò)引入非線性函數(shù)來(lái)更好地?cái)M合真實(shí)世界中更為復(fù)雜的數(shù)據(jù)關(guān)系。這使得非線性模型能夠更準(zhǔn)確地描述數(shù)據(jù),但也可能導(dǎo)致更復(fù)雜的模型結(jié)構(gòu)和更難以解釋的結(jié)果。

下面是一個(gè)使用多項(xiàng)式回歸的代碼~

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 生成帶噪聲的非線性數(shù)據(jù)
np.random.seed(0)
X = np.linspace(-3, 3, 100)
y = 2 * X**3 - 3 * X**2 + 4 * X - 5 + np.random.normal(0, 10, 100)

# 將 X 轉(zhuǎn)換成矩陣形式
X = X[:, np.newaxis]

# 使用多項(xiàng)式特征進(jìn)行變換
poly = PolynomialFeatures(degree=3)
X_poly = poly.fit_transform(X)

# 構(gòu)建并擬合多項(xiàng)式回歸模型
model = LinearRegression()
model.fit(X_poly, y)

# 繪制原始數(shù)據(jù)和擬合曲線
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict(X_poly), color='red')
plt.title('Polynomial Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.show()

這段代碼使用了?PolynomialFeatures?來(lái)對(duì)自變量進(jìn)行多項(xiàng)式特征變換,然后使用?LinearRegression?擬合多項(xiàng)式回歸模型,并繪制了原始數(shù)據(jù)和擬合曲線的圖像。

如果有問(wèn)題,隨時(shí)再反饋~

# 自相關(guān)性

今天先聊聊自相關(guān)性。時(shí)間序列數(shù)據(jù)中的自相關(guān)指的是數(shù)據(jù)中同一變量在不同時(shí)間點(diǎn)之間的相關(guān)性。換句話說(shuō),它衡量了時(shí)間序列中一個(gè)時(shí)間點(diǎn)的觀測(cè)值與另一個(gè)時(shí)間點(diǎn)的觀測(cè)值之間的相關(guān)程度。自相關(guān)通常在時(shí)間序列數(shù)據(jù)分析中被用來(lái)檢測(cè)數(shù)據(jù)中的周期性或趨勢(shì)性。

如果數(shù)據(jù)存在自相關(guān),會(huì)對(duì)回歸模型造成一些影響。具體來(lái)說(shuō),自相關(guān)可能導(dǎo)致模型中的殘差(預(yù)測(cè)值與實(shí)際值之間的差異)不再獨(dú)立,從而違反了線性回歸模型的基本假設(shè)之一,即殘差之間相互獨(dú)立。這會(huì)導(dǎo)致模型的系數(shù)估計(jì)不準(zhǔn)確,使得模型預(yù)測(cè)能力下降,同時(shí)可能增加對(duì)時(shí)間序列中隨機(jī)波動(dòng)的敏感性。

在檢測(cè)和處理自相關(guān)性方面,通常有 4 種方法:

1. 自相關(guān)函數(shù)(ACF)和偏自相關(guān)函數(shù)(PACF):通過(guò)繪制數(shù)據(jù)的自相關(guān)函數(shù)圖和偏自相關(guān)函數(shù)圖,可以直觀地查看時(shí)間序列數(shù)據(jù)中自相關(guān)的模式。ACF和PACF可以幫助確定時(shí)間序列中的階數(shù),從而選擇合適的自回歸(AR)和移動(dòng)平均(MA)模型

2. 差分法(Differencing):通過(guò)對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行一階或多階差分,可以消除或減弱數(shù)據(jù)中的自相關(guān)性。差分法的基本思想是通過(guò)計(jì)算相鄰時(shí)間點(diǎn)之間的差異來(lái)去除趨勢(shì)和季節(jié)性,從而使得數(shù)據(jù)更加平穩(wěn)。

3. 自回歸移動(dòng)平均模型(ARMA):ARMA模型是一種結(jié)合了自回歸和移動(dòng)平均的模型,可以用來(lái)建模時(shí)間序列數(shù)據(jù)中的自相關(guān)性。通過(guò)擬合ARMA模型,可以估計(jì)出數(shù)據(jù)中的自相關(guān)結(jié)構(gòu),并進(jìn)一步進(jìn)行預(yù)測(cè)。

4. 自回歸積分移動(dòng)平均模型(ARIMA):ARIMA模型在ARMA的基礎(chǔ)上引入了差分法,可以處理非平穩(wěn)的時(shí)間序列數(shù)據(jù)。ARIMA模型可以有效地消除數(shù)據(jù)中的自相關(guān)性,并提高模型的準(zhǔn)確性。

下面,咱們實(shí)現(xiàn)一個(gè)利用差分法來(lái)處理自相關(guān)性的代碼~

import torch
import numpy as np
import matplotlib.pyplot as plt

# 生成示例時(shí)間序列數(shù)據(jù)
np.random.seed(0)
n = 100
t = np.arange(n)
y = 0.5 * t + 0.3 * np.sin(0.1 * t) + np.random.normal(0, 1, n)

# 繪制原始時(shí)間序列圖
plt.figure(figsize=(10, 4))
plt.plot(t, y, label='Original Time Series')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Original Time Series Data')
plt.legend()
plt.grid(True)
plt.show()

# 計(jì)算一階差分
diff_y = np.diff(y)

# 繪制一階差分后的時(shí)間序列圖
plt.figure(figsize=(10, 4))
plt.plot(t[1:], diff_y, label='First Difference')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('First Difference Time Series Data')
plt.legend()
plt.grid(True)
plt.show()

在上面的示例中,我們首先生成了一個(gè)示例的時(shí)間序列數(shù)據(jù)。

然后計(jì)算了這個(gè)時(shí)間序列數(shù)據(jù)的一階差分,并繪制了原始時(shí)間序列數(shù)據(jù)和一階差分后的時(shí)間序列數(shù)據(jù)。通過(guò)一階差分,我們可以看到原始數(shù)據(jù)中的趨勢(shì)和季節(jié)性被去除,從而減弱了數(shù)據(jù)中的自相關(guān)性。

本文章轉(zhuǎn)載微信公眾號(hào)@深夜努力寫(xiě)Python

上一篇:

超全總結(jié)!Pythorch 構(gòu)建Attention-lstm相關(guān)模型!!

下一篇:

機(jī)器學(xué)習(xí)各個(gè)算法優(yōu)缺點(diǎn)!!
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)