日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

回归综合案例——利用回归模型预测鲍鱼年龄

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回归综合案例——利用回归模型预测鲍鱼年龄 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回歸綜合案例——利用回歸模型預測鮑魚年齡

1 數據集探索性分析

首先將鮑魚數據集abalone_dataset.csv讀取為pandas的DataFrame格式。

import pandas as pd import warnings warnings.filterwarnings('ignore') data = pd.read_csv(r"C:\Users\86182\Desktop\abalone_dataset.csv") data.head()

#查看數據集中樣本數量和特征數量 data.shape

(4177,9)

#查看數據信息,檢查是否有缺失值 data.info()

data.describe()


數據集一共有4177個樣本,每個樣本有9個特征,其中rings為鮑魚環數,能夠代表鮑魚年齡,是預測變量。除了sex為離散特征,其余都為連續變量。

觀察sex列的取值分布情況。

import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline sns.countplot(x = "sex",data = data)

data['sex'].value_counts()


對于連續特征,可以使用seaborn的distplot函數繪制直方圖觀察特征取值情況。我們將8個連續特征的直方圖繪制在一個4行2列的子圖布局中。

i = 1 #子圖計數 plt.figure(figsize=(16,8)) for col in data.columns[1:]:plt.subplot(4,2,i)i = i + 1sns.distplot(data[col])plt.tight_layout()

sns.pairplot(data,hue="sex")


從以上連續特征之間的散點圖我們可以看到一些基本的結果:

●例如從第一行可以看到鮑魚的長度length 和鮑魚直徑diameter 、鮑魚高度height 存在明顯的線性關系。鮑魚長度與鮑魚的四種重量之間存在明顯的非線性關系。
●觀察最后一行,鮑魚環數rings 與各個特征均存在正相關性,中與height 的線性關系最為直觀。
●觀察對角線上的直方圖,可以看到幼鮑魚( sex 取值為")在各個特征上的取值明顯小于其他成年鮑魚。而雄性鮑魚( sex取值為“M")和雌性鮑魚( sex 取值為“F")各個特征取值分布沒有明顯的差異。

為了定量地分析特征之間的線性相關性,我們計算特征之間的相關系數矩陣,并借助熱力圖將相關性可視化。

corr_df = data.corr() corr_df

fig,ax = plt.subplots(figsize=(12,12)) #繪制熱力圖 ax = sns.heatmap(corr_df,linewidths=.5,cmap="Greens",annot=True,xticklabels=corr_df.columns,yticklabels=corr_df.index) ax.xaxis.set_label_position('top') ax.xaxis.tick_top()

2 鮑魚數據預處理

2.1 對sex特征進行Onehot編碼,便于后續模型納入啞變量
使用pandas的get_dummies函數對sex特征做Onehot編碼處理。

sex_onehot = pd.get_dummies(data["sex"],prefix="sex") data[sex_onehot.columns] = sex_onehot data.head()


2.2 添加取值為 1 的特征

data["ones"] = 1 data.head()


2.3 根據鮑魚環計算年齡
一般每過一年,鮑魚就會在殼上留下一道深深地印記,這叫生長紋,就相當于樹木的年輪。在本數據集中,我們要預測的是鮑魚的年齡,可以通過環數rings加上1.5得到。

data["age"] = data["rings"] + 1.5 data.head()


2.4 篩選特征
將預測目標設置為age列,然后構造兩組特征,一組包含ones,一組包含ones。對于sex相關的列,我們只使用sex_F和sex_M。

y = data["age"] #因變量 features_with_ones = ["length","diameter","height","whole weight","shucked weight","viscera weight","shell weight","sex_F","sex_M","ones"] features_without_ones = ["length","diameter","height","whole weight","shucked weight","viscera weight","shell weight","sex_F","sex_M"] X = data[features_with_ones] data.columns


2.5 將鮑魚數據集劃分為訓練集和測試集
將數據集隨機劃分為訓練集和測試集,其中80%樣本為訓練集,剩余20%樣本為測試集。

from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=111)

3 實現線性回歸和嶺回歸

3.1 使用Numpy實現線性回歸
如果矩陣xTx為滿秩(行列式不為0),則簡單線性回歸的解為W=(XTx)-1xTy。實現一個函數linear _regression, 其輸入為訓練集特征部分和標簽部分,返回回歸系數向量。我們借助numpy 工具中的np. linalg. det函數和np. linalg. inv函數分別求矩陣的行列式和矩陣的逆。

import numpy as np def linear_regression(X,y):w = np.zeros_like(X.shape[1])if np.linalg.det(X.T.dot(X)) != 0:w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)return w

使用上述實現的線性回歸模型在鮑魚訓練集上訓練模型。

w1 = linear_regression(X_train,y_train) w1 = pd.DataFrame(data = w1,index=X.columns,columns = ["numpy_w"]) w1.round(decimals=2)


可見我們求得的模型為:
y=-l.12 х length + 10 х diameter + 20.74 х height + 9.61 х whole_ weight-20.05 х shucked_ weight - 12.07 х viscera_ weight + 6.55 х shell_ weight + 0.88x sex_ F+0.87 x sex_ M + 4.32

3.2 使用sklearn實現線性回歸

from sklearn.linear_model import LinearRegression lr = LinearRegression() lr.fit(X_train[features_without_ones],y_train) print(lr.coef_)

w_lr = [] w_lr.extend(lr.coef_) w_lr.append(lr.intercept_) w1["lr_sklearn_w"] = w_lr w1.round(decimals=2)


3.3 使用Numpy實現嶺回歸(Ridge)

def ridge_regression(X,y,ridge_lambda):penalty_matrix = np.eye(X.shape[1])penalty_matrix[X.shape[1] - 1][X.shape[1] - 1] = 0w = np.linalg.inv(X.T.dot(X) + ridge_lambda * penalty_matrix).dot(X.T).dot(y)return w


在鮑魚訓練集上使用ridge_regression函數訓練嶺回歸模型,正則化系數設置為1.

w2 = ridge_regression(X_train,y_train,1.0) print(w2)

w1["numpy_ridge_w"] = w2 w1.round(decimals=2)


3.4 利用sklearn實現嶺回歸
與sklearn中嶺回歸對比,同樣正則化系數設置為1。

from sklearn.linear_model import Ridge ridge = Ridge(alpha=1.0) ridge.fit(X_train[features_without_ones],y_train) w_ridge = [] w_ridge.extend(ridge.coef_) w_ridge.append(ridge.intercept_) w1["ridge_sklearn_w"] = w_ridge w1.round(decimals=2)


3.5 嶺跡分析

alphas = np.logspace(-10,10,20) coef = pd.DataFrame() for alpha in alphas:ridge_clf = Ridge(alpha=alpha)ridge_clf.fit(X_train[features_without_ones],y_train)df = pd.DataFrame([ridge_clf.coef_],columns=X_train[features_without_ones].columns)df['alpha'] = alphacoef = coef.append(df,ignore_index=True) coef.round(decimals=2)

import matplotlib.pyplot as plt %matplotlib inline #繪圖 #顯示中文和正負號 plt.rcParams['font.sans-serif'] = ['SimHei','Times New Roman'] plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['figure.dpi'] = 300 #分辨率 plt.figure(figsize=(9, 6)) coef['alpha'] = coef['alpha']for feature in X_train.columns[:-1]:plt.plot('alpha',feature,data=coef) ax = plt.gca() ax.set_xscale('log') plt.legend(loc='upper right') plt.xlabel(r'$\alpha$',fontsize=15) plt.ylabel('系數',fontsize=15) plt.show()

4 使用LASSO 構建鮑魚年齡預測模型

from sklearn.linear_model import Lasso lasso = Lasso(alpha=0.01) lasso.fit(X_train[features_without_ones],y_train) print(lasso.coef_) print(lasso.intercept_)

coef = pd.DataFrame() for alpha in np.linspace(0.0001,0.2,20):lasso_clf = Lasso(alpha=alpha)lasso_clf.fit(X_train[features_without_ones],y_train)df = pd.DataFrame([lasso_clf.coef_],columns=X_train[features_without_ones].columns)df['alpha'] = alphacoef = coef.append(df,ignore_index=True) coef.head() #繪圖 plt.figure(figsize=(9, 6),dpi=600) for feature in X_train.columns[:-1]:plt.plot('alpha',feature,data=coef) plt.legend(loc='upper right') plt.xlabel(r'$\alpha$',fontsize=15) plt.ylabel('系數',fontsize=15) plt.show()

coef

5 鮑魚年齡預測模型效果評估

from sklearn.metrics import mean_squared_error from sklearn.metrics import mean_absolute_error from sklearn.metrics import r2_score #MAE y_test_pred_lr = lr.predict(X_test.iloc[:,:-1]) print(round(mean_absolute_error(y_test,y_test_pred_lr),4)) y_test_pred_ridge = ridge.predict(X_test[features_without_ones]) print(round(mean_absolute_error(y_test,y_test_pred_ridge),4)) y_test_pred_lasso = lasso.predict(X_test[features_without_ones]) print(round(mean_absolute_error(y_test,y_test_pred_lasso),4))

1.6016
1.5984
1.6402

#MAE y_test_pred_lr = lr.predict(X_test.iloc[:,:-1]) print(round(mean_absolute_error(y_test,y_test_pred_lr),4)) y_test_pred_ridge = ridge.predict(X_test[features_without_ones]) print(round(mean_absolute_error(y_test,y_test_pred_ridge),4)) y_test_pred_lasso = lasso.predict(X_test[features_without_ones]) print(round(mean_absolute_error(y_test,y_test_pred_lasso),4))

5.3009
4.959
5.1

#R2系數 print(round(r2_score(y_test,y_test_pred_lr),4)) print(round(r2_score(y_test,y_test_pred_ridge),4)) print(round(r2_score(y_test,y_test_pred_lasso),4))

0.5257
0.5563
0.5437

5.2 殘差圖
殘差圖是一種用來診斷回歸模型效果的圖。在殘差圖中,如果點隨機分布在0附近,則說明回歸效果較好。如果在殘差圖中發現了某種結構,則說明回歸效果不佳,需要重新建模。

plt.figure(figsize=(9, 6),dpi=600) y_train_pred_ridge = ridge.predict(X_train[features_without_ones]) plt.scatter(y_train_pred_ridge,y_train_pred_ridge - y_train,c="g",alpha=0.6) plt.scatter(y_test_pred_ridge,y_test_pred_ridge - y_test,c="r",alpha=0.6) plt.hlines(y=0,xmin=0,xmax=30,color="b",alpha=0.6) plt.ylabel("Residuals") plt.xlabel("Predict")

總結

以上是生活随笔為你收集整理的回归综合案例——利用回归模型预测鲍鱼年龄的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲女人初尝黑人巨大 | 欧美精品一二三区 | 国产又大又粗又爽 | 欧洲一级视频 | 国产精品-色哟哟 | 色综合一区二区 | 小sao货水好多真紧h无码视频 | 91精品999| aaa国产精品 | 日韩在线欧美 | ktv做爰视频一区二区 | 亚洲一区二三区 | 最新黄色网址在线观看 | 毛片视频软件 | 亚洲自偷自偷偷色无码中文 | 久草福利资源在线观看 | 国产欧美在线播放 | 蜜臀免费av | 91叉叉叉 | 一区二区三区日本视频 | 91精品国产入口 | 91在线资源 | 中文字幕在线不卡视频 | 亚洲成人mv | 一区二区自拍偷拍 | 国产免费脚交足视频在线观看 | 亚洲熟妇无码一区二区三区 | 色噜噜狠狠一区二区三区牛牛影视 | 中文字幕精品一区二区精品 | 91avcom| 成人a毛片 | 哺乳期av| 久久久中文字幕 | 亚洲成人播放 | 五月婷网站 | 久久久香蕉网 | 麻豆久久精品 | 日本老妇性生活 | 午夜极品 | 天天色播| 色狠狠一区 | 欧美精品在线观看 | 少妇被粗大猛进进出出s小说 | 色婷婷亚洲综合 | 丝袜综合网| 亚洲一二三四视频 | 69**夜色精品国产69乱 | 伊人久久大香线蕉综合网站 | 人妻激情偷乱视频一区二区三区 | 大桥未久av一区二区三区中文 | 黄色免费在线视频 | 国产黄色一级片视频 | 91大尺度 | 国产成人精品在线播放 | 欧美日韩一区二区在线播放 | 亚洲精品一区在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 毛茸茸毛片| 久热精品在线视频 | 国产精品夫妻 | 国产黄色免费大片 | 国产有码在线观看 | 尹人综合| 69人妻精品久久无人专区 | 在线免费观看黄色 | 撒尿free性hd| 色网址在线观看 | 小泽玛利亚一区二区三区在线观看 | www.狠狠爱| 秋霞福利 | 狠狠摸狠狠操 | 天天弄天天干 | 有码一区二区 | 欧美少妇一区二区三区 | 国产无遮挡免费观看视频网站 | 91麻豆精品国产91久久久无需广告 | 五月婷婷网站 | 欧美三级视频在线 | 日韩中文字幕免费 | 女人囗交吞精囗述 | 色一情一乱一乱一区91av | 青春草av | 色一情一乱一区二区三区 | 9久久9毛片又大又硬又粗 | av一级 | 青春草国产视频 | javxxx| 国产-第1页-浮力影院 | 亚洲综合另类 | 欧美一卡二卡在线观看 | 天堂在线| 成人av一区二区三区在线观看 | 中文日韩av| 午夜精品欧美 | 国产精品无码粉嫩小泬 | 狠狠操天天干 | 国产精品va无码一区二区 | 日本少妇激三级做爰在线 | 欧美片17c07.com |