數(shù)據(jù)分析:回歸分析:回歸診斷與模型選擇_第1頁
數(shù)據(jù)分析:回歸分析:回歸診斷與模型選擇_第2頁
數(shù)據(jù)分析:回歸分析:回歸診斷與模型選擇_第3頁
數(shù)據(jù)分析:回歸分析:回歸診斷與模型選擇_第4頁
數(shù)據(jù)分析:回歸分析:回歸診斷與模型選擇_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)分析:回歸分析:回歸診斷與模型選擇1數(shù)據(jù)分析:回歸分析基礎(chǔ)1.1線性回歸模型簡介線性回歸是統(tǒng)計(jì)學(xué)中一種常用的數(shù)據(jù)分析方法,用于研究一個或多個自變量與一個因變量之間的關(guān)系。在最簡單的情況下,我們考慮一個簡單線性回歸模型,其中只有一個自變量。模型可以表示為:y其中,y是因變量,x是自變量,β0和β1是模型參數(shù),1.1.1示例代碼假設(shè)我們有以下數(shù)據(jù)集,表示學(xué)生的學(xué)習(xí)時(shí)間(小時(shí))與考試成績(分?jǐn)?shù))之間的關(guān)系:學(xué)習(xí)時(shí)間(小時(shí))考試成績(分?jǐn)?shù))265575370885780我們可以使用Python的statsmodels庫來擬合一個簡單線性回歸模型:importstatsmodels.apiassm

importpandasaspd

importnumpyasnp

#創(chuàng)建數(shù)據(jù)集

data={'學(xué)習(xí)時(shí)間':[2,5,3,8,7],'考試成績':[65,75,70,85,80]}

df=pd.DataFrame(data)

#添加常數(shù)項(xiàng)

df['常數(shù)項(xiàng)']=1

#選擇自變量和因變量

X=df['常數(shù)項(xiàng)']

y=df['考試成績']

#擬合模型

X=sm.add_constant(X)#添加常數(shù)項(xiàng)

model=sm.OLS(y,X).fit()

print(model.summary())這段代碼首先創(chuàng)建了一個包含學(xué)習(xí)時(shí)間和考試成績的數(shù)據(jù)框,然后使用sm.add_constant函數(shù)添加了一個常數(shù)項(xiàng),最后使用sm.OLS函數(shù)擬合模型并打印模型摘要。1.2最小二乘法原理最小二乘法是一種用于估計(jì)線性回歸模型參數(shù)的方法。其目標(biāo)是最小化殘差平方和(RSS),即模型預(yù)測值與實(shí)際觀測值之間的差異的平方和。對于簡單線性回歸模型,RSS可以表示為:R通過求導(dǎo)并設(shè)置導(dǎo)數(shù)為零,我們可以找到β0和β1.2.1示例代碼使用最小二乘法手動計(jì)算回歸系數(shù):#手動計(jì)算最小二乘估計(jì)

x=df['學(xué)習(xí)時(shí)間']

y=df['考試成績']

#計(jì)算x和y的均值

x_mean=np.mean(x)

y_mean=np.mean(y)

#計(jì)算斜率和截距

numerator=np.sum((x-x_mean)*(y-y_mean))

denominator=np.sum((x-x_mean)**2)

beta_1=numerator/denominator

beta_0=y_mean-(beta_1*x_mean)

#打印結(jié)果

print(f'斜率估計(jì):{beta_1}')

print(f'截距估計(jì):{beta_0}')這段代碼計(jì)算了學(xué)習(xí)時(shí)間和考試成績的均值,然后使用這些均值和數(shù)據(jù)點(diǎn)來計(jì)算斜率和截距的最小二乘估計(jì)。1.3回歸系數(shù)的解釋回歸系數(shù)β1表示自變量x每增加一個單位,因變量y的平均變化量。而β0是當(dāng)自變量x為0時(shí),因變量1.3.1示例解釋在上述學(xué)習(xí)時(shí)間與考試成績的例子中,假設(shè)我們得到的回歸系數(shù)為β0=501.4假設(shè)檢驗(yàn)與置信區(qū)間假設(shè)檢驗(yàn)用于確定回歸系數(shù)是否顯著不同于零。通常,我們使用t檢驗(yàn)來評估單個回歸系數(shù)的顯著性。置信區(qū)間則提供了回歸系數(shù)可能值的范圍。1.4.1示例代碼使用statsmodels庫的模型摘要來查看假設(shè)檢驗(yàn)和置信區(qū)間:#查看模型摘要

print(model.summary())

#輸出:

#OLSRegressionResults

#==============================================================================

#Dep.Variable:考試成績R-squared:0.820

#Model:OLSAdj.R-squared:0.760

#Method:LeastSquaresF-statistic:15.00

#Date:Tue,28Mar2023Prob(F-statistic):0.0497

#Time:12:00:00Log-Likelihood:-19.900

#No.Observations:5AIC:43.80

#DfResiduals:3BIC:43.84

#DfModel:1

#CovarianceType:nonrobust

#==============================================================================

#coefstderrtP>|t|[0.0250.975]

#

#常數(shù)項(xiàng)50.00005.00010.0000.00035.00065.000

#學(xué)習(xí)時(shí)間5.00001.2913.8720.0491.4628.538

#==============================================================================

#Omnibus:0.000Durbin-Watson:2.000

#Prob(Omnibus):1.000Jarque-Bera(JB):0.000

#Skew:0.000Prob(JB):1.000

#Kurtosis:3.000Cond.No.1.00

#==============================================================================

#注意:該結(jié)果是基于示例數(shù)據(jù)生成的,實(shí)際結(jié)果可能有所不同。在模型摘要中,我們可以看到學(xué)習(xí)時(shí)間的系數(shù)為5.0000,標(biāo)準(zhǔn)誤差為1.291,t統(tǒng)計(jì)量為3.872,p值為0.049。這表明學(xué)習(xí)時(shí)間與考試成績之間的關(guān)系是統(tǒng)計(jì)上顯著的(p<0.05)。置信區(qū)間為[1.462,8.538],表示在95%的置信水平下,學(xué)習(xí)時(shí)間每增加1小時(shí),考試成績增加的分?jǐn)?shù)在1.462到8.538分之間。通過以上內(nèi)容,我們深入了解了線性回歸模型的基礎(chǔ),包括模型的數(shù)學(xué)表示、最小二乘法的原理、回歸系數(shù)的解釋以及如何進(jìn)行假設(shè)檢驗(yàn)和計(jì)算置信區(qū)間。這些知識對于進(jìn)行回歸分析和理解數(shù)據(jù)之間的關(guān)系至關(guān)重要。2回歸診斷2.1殘差分析殘差分析是回歸診斷中的關(guān)鍵步驟,用于檢查模型的假設(shè)是否成立,以及模型是否適當(dāng)?shù)財(cái)M合了數(shù)據(jù)。殘差是觀測值與模型預(yù)測值之間的差異,理想情況下,這些殘差應(yīng)該隨機(jī)分布,沒有明顯的模式或趨勢。2.1.1檢查殘差的正態(tài)性正態(tài)性檢驗(yàn)是通過檢查殘差是否遵循正態(tài)分布來進(jìn)行的。這可以通過繪制殘差的直方圖或Q-Q圖來實(shí)現(xiàn)。importnumpyasnp

importpandasaspd

importseabornassns

importmatplotlib.pyplotasplt

fromscipyimportstats

fromsklearn.linear_modelimportLinearRegression

#假設(shè)數(shù)據(jù)

np.random.seed(0)

x=np.random.rand(100)

y=2+3*x+np.random.randn(100)

#創(chuàng)建DataFrame

df=pd.DataFrame({'x':x,'y':y})

#擬合線性回歸模型

model=LinearRegression()

model.fit(df[['x']],df['y'])

#計(jì)算殘差

df['residuals']=df['y']-model.predict(df[['x']])

#繪制殘差的直方圖

sns.histplot(df['residuals'],kde=True)

plt.title('殘差的直方圖')

plt.show()

#繪制Q-Q圖

bplot(df['residuals'],dist="norm",plot=plt)

plt.title('殘差的Q-Q圖')

plt.show()2.1.2檢查殘差的均值為零殘差的均值應(yīng)該接近于零,這表明模型沒有系統(tǒng)性地過高或過低預(yù)測。#計(jì)算殘差的均值

mean_residuals=df['residuals'].mean()

print(f'殘差的均值:{mean_residuals}')2.1.3檢查殘差的恒定方差殘差的方差應(yīng)該在整個預(yù)測范圍內(nèi)保持恒定,這稱為同方差性。如果方差隨預(yù)測值的增加而增加,這稱為異方差性。#繪制殘差圖

sns.scatterplot(x='y',y='residuals',data=df)

plt.title('殘差圖')

plt.show()2.2異方差性檢測異方差性檢測用于檢查殘差的方差是否隨預(yù)測值的變化而變化。常見的檢測方法包括Breusch-Pagan檢驗(yàn)和White檢驗(yàn)。2.2.1Breusch-Pagan檢驗(yàn)fromstatsmodels.stats.diagnosticimporthet_breushpagan

#進(jìn)行Breusch-Pagan檢驗(yàn)

bp_test=het_breushpagan(df['residuals'],df[['x']])

print(f'BP檢驗(yàn)結(jié)果:{bp_test}')2.2.2White檢驗(yàn)fromstatsmodels.stats.diagnosticimporthet_white

#進(jìn)行White檢驗(yàn)

white_test=het_white(df['residuals'],df[['x']])

print(f'White檢驗(yàn)結(jié)果:{white_test}')2.3多重共線性診斷多重共線性是指模型中的自變量之間存在高度相關(guān)性,這可能導(dǎo)致回歸系數(shù)的不穩(wěn)定和顯著性測試的不準(zhǔn)確。VIF(方差膨脹因子)是診斷多重共線性的常用方法。2.3.1計(jì)算VIFfromstatsmodels.stats.outliers_influenceimportvariance_inflation_factor

#計(jì)算VIF

vif=pd.DataFrame()

vif["VIFFactor"]=[variance_inflation_factor(df.values,i)foriinrange(df.shape[1])]

vif["features"]=df.columns

print(vif)2.4自相關(guān)性檢查自相關(guān)性檢查用于確定殘差是否隨時(shí)間或順序相關(guān)。這在時(shí)間序列數(shù)據(jù)中尤為重要。Durbin-Watson檢驗(yàn)是檢查自相關(guān)性的常用方法。2.4.1Durbin-Watson檢驗(yàn)fromstatsmodels.stats.stattoolsimportdurbin_watson

#進(jìn)行Durbin-Watson檢驗(yàn)

dw_test=durbin_watson(df['residuals'])

print(f'Durbin-Watson檢驗(yàn)結(jié)果:{dw_test}')2.4.2解釋Durbin-Watson檢驗(yàn)結(jié)果Durbin-Watson的值在0到4之間,值接近2表示殘差沒有自相關(guān)性,小于2表示正自相關(guān),大于2表示負(fù)自相關(guān)。2.5模型選擇模型選擇是基于一系列標(biāo)準(zhǔn)來確定最佳回歸模型的過程。常見的標(biāo)準(zhǔn)包括AIC(赤池信息準(zhǔn)則)、BIC(貝葉斯信息準(zhǔn)則)和調(diào)整后的R2。2.5.1AIC和BICfromstatsmodels.formula.apiimportols

#使用statsmodels進(jìn)行模型擬合

result=ols('y~x',data=df).fit()

#輸出AIC和BIC

print(f'AIC:{result.aic}')

print(f'BIC:{result.bic}')2.5.2調(diào)整后的R2調(diào)整后的R2考慮了模型復(fù)雜度的影響,通常比R2更可靠。#輸出調(diào)整后的R2

print(f'調(diào)整后的R2:{result.rsquared_adj}')通過比較不同模型的這些標(biāo)準(zhǔn),可以選擇最合適的模型。較低的AIC和BIC值以及較高的調(diào)整后的R2值通常表示更好的模型擬合。3數(shù)據(jù)分析:回歸分析:模型選擇與評估3.1模型選擇與評估3.1.1AIC與BIC準(zhǔn)則AIC(AkaikeInformationCriterion)和BIC(BayesianInformationCriterion)是兩種常用的模型選擇準(zhǔn)則,用于在多個候選模型中選擇最優(yōu)模型。它們通過平衡模型的擬合度和復(fù)雜度來避免過擬合。AIC準(zhǔn)則AIC定義為:A其中,k是模型中參數(shù)的數(shù)量,L是最大似然估計(jì)。AIC越小,模型越優(yōu)。BIC準(zhǔn)則BIC定義為:B其中,n是樣本數(shù)量。BIC在AIC的基礎(chǔ)上增加了對樣本量的懲罰,因此在樣本量較大時(shí),BIC傾向于選擇更簡單的模型。示例代碼importstatsmodels.apiassm

importnumpyasnp

#生成模擬數(shù)據(jù)

np.random.seed(0)

x=np.random.rand(100)

y=2+3*x+np.random.randn(100)

#構(gòu)建模型

X=sm.add_constant(x)

model=sm.OLS(y,X)

results=model.fit()

#輸出AIC和BIC

print("AIC:",results.aic)

print("BIC:",results.bic)3.1.2交叉驗(yàn)證方法交叉驗(yàn)證是一種評估模型泛化能力的方法,通過將數(shù)據(jù)集分為訓(xùn)練集和驗(yàn)證集,多次訓(xùn)練和驗(yàn)證模型,以獲得更穩(wěn)定的性能評估。K折交叉驗(yàn)證將數(shù)據(jù)集隨機(jī)分為K個子集,每次將其中一個子集作為驗(yàn)證集,其余K?1個子集作為訓(xùn)練集,重復(fù)示例代碼fromsklearn.model_selectionimportKFold

fromsklearn.linear_modelimportLinearRegression

fromsklearn.datasetsimportload_boston

fromsklearn.metricsimportmean_squared_error

#加載數(shù)據(jù)

data=load_boston()

X,y=data.data,data.target

#定義K折交叉驗(yàn)證

kf=KFold(n_splits=5,shuffle=True,random_state=42)

#初始化模型

model=LinearRegression()

#進(jìn)行交叉驗(yàn)證

mse_scores=[]

fortrain_index,val_indexinkf.split(X):

X_train,X_val=X[train_index],X[val_index]

y_train,y_val=y[train_index],y[val_index]

#訓(xùn)練模型

model.fit(X_train,y_train)

#驗(yàn)證模型

y_pred=model.predict(X_val)

mse=mean_squared_error(y_val,y_pred)

mse_scores.append(mse)

#輸出平均MSE

print("AverageMSE:",np.mean(mse_scores))3.1.3模型復(fù)雜度與過擬合模型復(fù)雜度是指模型的自由度或參數(shù)數(shù)量。過擬合是指模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,但在新數(shù)據(jù)上表現(xiàn)較差的現(xiàn)象。通常,模型復(fù)雜度越高,過擬合的風(fēng)險(xiǎn)越大。示例代碼fromsklearn.linear_modelimportRidge

fromsklearn.model_selectionimporttrain_test_split

#加載數(shù)據(jù)

X,y=load_boston(return_X_y=True)

#劃分訓(xùn)練集和測試集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#不同復(fù)雜度的模型

alphas=[0.1,1.0,10.0]

foralphainalphas:

model=Ridge(alpha=alpha)

model.fit(X_train,y_train)

#計(jì)算訓(xùn)練集和測試集的MSE

train_mse=mean_squared_error(y_train,model.predict(X_train))

test_mse=mean_squared_error(y_test,model.predict(X_test))

print(f"Alpha:{alpha},TrainMSE:{train_mse},TestMSE:{test_mse}")3.1.4特征選擇技術(shù)特征選擇是指從原始特征中選擇最相關(guān)的特征,以提高模型的性能和解釋性,同時(shí)減少計(jì)算成本。Lasso回歸Lasso回歸通過添加L1正則化項(xiàng)來實(shí)現(xiàn)特征選擇,將不重要的特征系數(shù)壓縮至0。示例代碼fromsklearn.linear_modelimportLasso

#加載數(shù)據(jù)

X,y=load_boston(return_X_y=True)

#Lasso回歸模型

model=Lasso(alpha=0.1)

model.fit(X,y)

#輸出非零系數(shù)的特征

selected_features=np.where(model.coef_!=0)[0]

print("SelectedFeatures:",selected_features)前向選擇前向選擇是一種逐步特征選擇方法,從空集開始,每次選擇一個最能提高模型性能的特征加入模型。示例代碼fromsklearn.feature_selectionimportSequentialFeatureSelector

#加載數(shù)據(jù)

X,y=load_boston(return_X_y=True)

#初始化模型和特征選擇器

model=LinearRegression()

sfs=SequentialFeatureSelector(model,n_features_to_select=5,direction='forward')

#進(jìn)行特征選擇

sfs.fit(X,y)

#輸出選擇的特征

selected_features=sfs.get_support(indices=True)

print("SelectedFeatures:",selected_features)后向消除后向消除與前向選擇相反,從所有特征開始,每次移除一個最不影響模型性能的特征。示例代碼#初始化模型和特征選擇器

sfs_backward=SequentialFeatureSelector(model,n_features_to_select=5,direction='backward')

#進(jìn)行特征選擇

sfs_backward.fit(X,y)

#輸出選擇的特征

selected_features_backward=sfs_backward.get_support(indices=True)

print("SelectedFeatures(Backward):",selected_features_backward)通過以上方法,我們可以有效地進(jìn)行模型選擇與評估,避免過擬合,同時(shí)選擇最相關(guān)的特征,提高模型的性能和解釋性。4高級回歸模型4.1多項(xiàng)式回歸4.1.1原理多項(xiàng)式回歸是一種線性回歸的擴(kuò)展,它通過引入變量的高次冪來擬合非線性數(shù)據(jù)。在多項(xiàng)式回歸中,我們假設(shè)因變量與自變量之間的關(guān)系可以表示為一個多項(xiàng)式函數(shù)。例如,一個二次多項(xiàng)式回歸模型可以表示為:y其中,y是因變量,x是自變量,β0,β4.1.2示例假設(shè)我們有一組數(shù)據(jù),表示了房屋面積與價(jià)格之間的關(guān)系,但這種關(guān)系并不是線性的。我們可以使用二次多項(xiàng)式回歸來擬合數(shù)據(jù)。importnumpyasnp

importpandasaspd

importmatplotlib.pyplotasplt

fromsklearn.preprocessingimportPolynomialFeatures

fromsklearn.linear_modelimportLinearRegression

fromsklearn.pipelineimportmake_pipeline

#創(chuàng)建數(shù)據(jù)

np.random.seed(0)

x=2-3*np.random.normal(0,1,20)

y=x-2*(x**2)+0.5*(x**3)+np.random.normal(-3,3,20)

#轉(zhuǎn)換為DataFrame

df=pd.DataFrame({'x':x,'y':y})

#繪制原始數(shù)據(jù)

plt.scatter(df['x'],df['y'],color='blue')

plt.title('原始數(shù)據(jù)')

plt.xlabel('x')

plt.ylabel('y')

plt.show()

#使用多項(xiàng)式回歸擬合數(shù)據(jù)

model=make_pipeline(PolynomialFeatures(2),LinearRegression())

model.fit(df[['x']],df['y'])

#預(yù)測

x_new=np.linspace(-2,2,100)

y_new=model.predict(x_new[:,np.newaxis])

#繪制擬合曲線

plt.scatter(df['x'],df['y'],color='blue')

plt.plot(x_new,y_new,color='red',linewidth=3)

plt.title('二次多項(xiàng)式回歸擬合')

plt.xlabel('x')

plt.ylabel('y')

plt.show()4.2嶺回歸與Lasso回歸4.2.1原理嶺回歸和Lasso回歸是兩種正則化線性回歸方法,用于處理多重共線性和特征選擇問題。嶺回歸:通過在損失函數(shù)中加入L2正則化項(xiàng),即所有回歸系數(shù)的平方和的λ倍,來減少模型的復(fù)雜度,防止過擬合。損失函數(shù)變?yōu)椋篖Lasso回歸:通過在損失函數(shù)中加入L1正則化項(xiàng),即所有回歸系數(shù)絕對值的λ倍,來實(shí)現(xiàn)特征選擇,將不重要的特征的系數(shù)壓縮至0。損失函數(shù)變?yōu)椋篖4.2.2示例使用sklearn庫中的Lasso和Ridge模型來處理一個具有多重共線性的數(shù)據(jù)集。importnumpyasnp

importpandasaspd

fromsklearn.linear_modelimportRidge,Lasso

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

#創(chuàng)建數(shù)據(jù)

np.random.seed(0)

X=np.random.rand(100,2)

y=2*X[:,0]+3*X[:,1]+np.random.randn(100)

#添加多重共線性

X[:,1]=X[:,0]+np.random.randn(100)*0.1

#劃分?jǐn)?shù)據(jù)集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#嶺回歸

ridge=Ridge(alpha=1.0)

ridge.fit(X_train,y_train)

ridge_pred=ridge.predict(X_test)

ridge_mse=mean_squared_error(y_test,ridge_pred)

#Lasso回歸

lasso=Lasso(alpha=0.1)

lasso.fit(X_train,y_train)

lasso_pred=lasso.predict(X_test)

lasso_mse=mean_squared_error(y_test,lasso_pred)

print("嶺回歸MSE:",ridge_mse)

print("Lasso回歸MSE:",lasso_mse)4.3非線性回歸模型4.3.1原理非線性回歸模型用于擬合因變量與自變量之間非線性關(guān)系的數(shù)據(jù)。與多項(xiàng)式回歸不同,非線性回歸模型的函數(shù)形式更加靈活,可以是任何非線性函數(shù)。例如,指數(shù)函數(shù)、對數(shù)函數(shù)、冪函數(shù)等。4.3.2示例使用scipy庫中的curve_fit函數(shù)來擬合一個指數(shù)函數(shù)。importnumpyasnp

importmatplotlib.pyplotasplt

fromscipy.optimizeimportcurve_fit

#定義指數(shù)函數(shù)

defexp_func(x,a,b,c):

returna*np.exp(-b*x)+c

#創(chuàng)建數(shù)據(jù)

np.random.seed(0)

x=np.linspace(0,4,50)

y=exp_func(x,2.5,1.3,0.5)+np.random.normal(0,0.2,50)

#繪制原始數(shù)據(jù)

plt.scatter(x,y,color='blue')

plt.title('原始數(shù)據(jù)')

plt.xlabel('x')

plt.ylabel('y')

plt.show()

#使用curve_fit擬合指數(shù)函數(shù)

popt,pcov=curve_fit(exp_func,x,y)

#預(yù)測

y_fit=exp_func(x,*popt)

#繪制擬合曲線

plt.scatter(x,y,color='blue')

plt.plot(x,y_fit,color='red',linewidth=3)

plt.title('指數(shù)函數(shù)擬合')

plt.xlabel('x')

plt.ylabel('y')

plt.show()4.4分位數(shù)回歸4.4.1原理分位數(shù)回歸是一種統(tǒng)計(jì)方法,用于估計(jì)因變量在不同分位數(shù)上的條件分布。與傳統(tǒng)的最小二乘回歸不同,分位數(shù)回歸最小化的是絕對誤差的加權(quán)和,權(quán)重由分位數(shù)決定。例如,對于τ分位數(shù)的回歸,損失函數(shù)為:L其中,ρτρ4.4.2示例使用statsmodels庫中的QuantReg模型來估計(jì)不同分位數(shù)上的回歸線。importnumpyasnp

importpandasaspd

importmatplotlib.pyplotasplt

importstatsmodels.apiassm

fromstatsmodels.formula.apiimportols,QuantReg

#創(chuàng)建數(shù)據(jù)

np.random.seed(0)

x=np.random.rand(100)

y=2*x+np.random.randn(100)

#添加非線性關(guān)系

y[x>0.5]=y[x>0.5]+2*(x[x>0.5]-0.5)

#繪制原始數(shù)據(jù)

plt.scatter(x,y,color='blue')

plt.title('原始數(shù)據(jù)')

plt.xlabel('x')

plt.ylabel('y')

plt.show()

#分位數(shù)回歸

q=[0.25,0.5,0.75]

models=[QuantReg(y,sm.add_constant(x)).fit(q=q_i)forq_iinq]

#繪制不同分位數(shù)的回歸線

plt.scatter(x,y,color='blue')

formodelinmodels:

plt.plot(x,model.params[0]+model.params[1]*x,color='red',linewidth=3)

plt.title('分位數(shù)回歸')

plt.xlabel('x')

plt.ylabel('y')

plt.legend(['q=0.25','q=0.5','q=0.75'])

plt.show()5實(shí)際案例分析:回歸分析中的數(shù)據(jù)預(yù)處理、模型構(gòu)建、診斷與選擇5.1數(shù)據(jù)預(yù)處理步驟在進(jìn)行回歸分析之前,數(shù)據(jù)預(yù)處理是至關(guān)重要的一步。它包括數(shù)據(jù)清洗、特征工程和數(shù)據(jù)轉(zhuǎn)換,確保模型訓(xùn)練在高質(zhì)量數(shù)據(jù)上進(jìn)行。5.1.1數(shù)據(jù)清洗數(shù)據(jù)清洗涉及處理缺失值、異常值和重復(fù)數(shù)據(jù)。例如,使用Pandas庫處理缺失值:importpandasaspd

#加載數(shù)據(jù)

data=pd.read_csv('data.csv')

#檢查缺失值

print(data.isnull().sum())

#刪除含有缺失值的行

data=data.dropna()

#或者填充缺失值

data['age'].fillna(data['age'].mean(),inplace=True)5.1.2特征工程特征工程包括創(chuàng)建新特征、選擇重要特征和編碼分類變量。例如,使用get_dummies函數(shù)編碼分類變量:#將分類變量轉(zhuǎn)換為虛擬變量

data=pd.get_dummies(data,columns=['gender'])5.1.3數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換如標(biāo)準(zhǔn)化或歸一化,可以提高模型性能。例如,使用StandardScaler進(jìn)行特征縮放:fromsklearn.preprocessingimportStandardScaler

#創(chuàng)建標(biāo)準(zhǔn)化器

scaler=StandardScaler()

#選擇需要標(biāo)準(zhǔn)化的特征

features_to_scale=['age','income']

#應(yīng)用標(biāo)準(zhǔn)化

data[features_to_scale]=scaler.fit_transform(data[features_to_scale])5.2模型構(gòu)建與診斷流程5.2.1構(gòu)建模型使用線性回歸模型作為示例:fromsklearn.linear_modelimportLinearRegression

fromsklearn.model_selectionimporttrain_test_split

#分割數(shù)據(jù)集

X_train,X_test,y_train,y_test=train_test_split(data.drop('price',axis=1),data['price'],test_size=0.2,random_state=42)

#創(chuàng)建線性回歸模型

model

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論