安全的關(guān)鍵.png)
如何高效爬取全球新聞網(wǎng)站 – 整合Scrapy、Selenium與Mediastack API實(shí)現(xiàn)自動(dòng)化新聞采集
對(duì)于多元多項(xiàng)式回歸:
關(guān)鍵有3點(diǎ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):
注意點(diǎ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ū)別和對(duì)回歸模型的影響。
1. 區(qū)別
a. 正則化項(xiàng)的形式:
L2正則化(嶺回歸):?使用的是模型參數(shù)的平方和的平方根(L2范數(shù))作為正則化項(xiàng)。
b. 特征選擇:
c. 解的穩(wěn)定性:
2. 影響回歸模型的方式
a. 參數(shù)收縮:
b. 模型復(fù)雜度:
3. 注意點(diǎn)和一些建議
總的來(lái)說(shuō),L1和L2正則化是在回歸模型中用于控制模型復(fù)雜度的有效手段,選擇取決于具體問(wèn)題和數(shù)據(jù)的性質(zhì)。
下面我會(huì)分別介紹學(xué)習(xí)曲線和驗(yàn)證曲線,并說(shuō)明它們能告訴我們的信息以及如何根據(jù)它們來(lái)調(diào)整模型參數(shù)。
學(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)證曲線(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)性。時(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
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)