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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

多元统计分析——多元线性回归

發布時間:2024/8/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多元统计分析——多元线性回归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 經典的線性回歸分析與交叉驗證 examDict={' 學習時 ':[0.50, 0.75, 1.00, 1.25,1.50,1.75, 1.75,2.00, 2.25,2.50, 2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], '分':[10,22,13 ,43,20,22,33,50,62 , 48,55,75,62,73,81,76,64,82,90,93]} examDf = pd.DataFrame(examDict) X_train,X_test,Y_train,Y_test = train_test_split(exam_X,exam_Y,train_size=0.8) model = LinearRegression() model.fit(X_train,Y_train) a = model.intercept_#截距 b = model.coef_#回歸系數 y_train_pred = model.predict(X_train) #預測 score = model.score(X_test,Y_test) #可決系數 0.8866470295386657 2. 經典的多元線性回歸分析的模型參數的假設檢驗 import statsmodels.api as sm from sklearn import datasets ## 從 scikit-learn 導入數據集 data = datasets.load_boston() ## 從數據集庫加載波士頓數據集 import numpy as np import pandas as pd df = pd.DataFrame(data.data, columns=data.feature_names) target = pd.DataFrame(data.target, columns=["MEDV"]) X = df[['CRIM', 'ZN', 'INDUS']] ## X 通常表示我們的輸入變量 (或自變量) y = target["MEDV"] ## Y 通常表示輸出/因變量 X = sm.add_constant(X) ## 我們添加一個截距(beta_0)到我們的模型 model = sm.OLS(y, X).fit() ## sm.OLS(輸出, 輸入) predictions = model.predict(X) model.summary() ## 打印出統計模型

3. 嶺回歸模型

X_train,X_test,Y_train,Y_test = train_test_split(df2,df1,train_size=0.8) model = Ridge(alpha=0.5,fit_intercept=True) model = RidgeCV(alphas=[0.01,0.1,0.2, 0.5, 1],normalize = True,cv=10) model.fit(X_train,Y_train) ridge_best_alpha = model.alpha_ #得到最佳lambda值 print(f"嶺回歸關鍵正則參數={ridge_best_alpha}") 計算可決系數 a=model.intercept_ b=model.coef_ y_train_pred =model.predict(X_train) score=model.score(X_test, Y_test) print(score)

4. 基于最佳lambda值建模

ridge = Ridge(alpha = ridge_best_alpha,normalize = True) ridge.fit(X_train,Y_train) ridge_predict = ridge.predict(X_test) 計算損失函數 rmse = np.sqrt(mean_squared_error(Y_test,ridge_predict))

5. ?LASSO回歸模型:

lasso_cv = LassoCV(alphas = alphas, normalize=True, cv = 10, max_iter=10000) lasso_cv.fit(x_tr,y_tr) lasso_best_alpha = lasso_cv.alpha_ lasso_best_alpha lasso = Lasso(alpha = lasso_best_alpha, normalize=True, max_iter=10000) lasso.fit(x_tr, y_tr) lasso_predict = lasso.predict(x_te) #預測 RMSE = np.sqrt(mean_squared_error(y_te,lasso_predict))

本次任務額外知識點:

seed = 7
np.random.seed(seed)
10折交叉驗證
kfold = StratifiedKFold(n_splits=10, shuffle=False, random_state=seed)
固定random_state后,每次構建的模型是相同的、生成的數據集是相同的、每次的拆分結果也是相同的

y代表輸出答案,y_代表標準答案
mse=tf.reduce_mean(tf.square(Y_test-yy_train_pred))

題目

3. 數據集簡介 原始數據有 14 個變量的 506 個觀察值,其中,medv(自住房屋房 價中位數,單位:千美元)是原始的目標變量,其他變量包括:crim(城鎮 的人均犯罪率)mn(占地面積超過 25000 平方英尺的住宅用地的比例)、indus(每個鎮的非零售業務比例,單位:英畝)chas(有關查爾斯河的 虛擬變量,如果挨著河為1,否則為0)mo(一氧化氮濃度,單位:Ppm)、 m(平均每間住房的房間數量)、age(1940 年以前建成的自住單位的房 齡比例)dis(五個波土頓就業中心的加權距離)rad(高速公路的可達 性指數)tax(每萬美元全價物業值的財產稅率)ptratio(城鎮學生與教 師的比例)b(=100078-0.63)2,其中的 B 是城鎮黑人的比例)Istat(低 收入人口比例);更正過的數據集有以下附加變量:cmed(修正了的自住 房價中位數,單位:千美元)tow(鎮名稱)trat(人口普查區)lon( 口普查區的經度)lat(人口普查區的緯度) 4. 數據集使用 我們將用 comedy(修正了的自住房屋房價中位數)作為因變量, 而將 crimznindusnoxrmagedisradtaxptratioblstat 12個變量作為自變量。(數據詳見BostonHousing2.csv文件) 5. 回歸任務指定 (1)利用指定的 12 個自變量與因變量 comedy 創建散布圖矩陣,要目的查看各自變量與因變量之間的相關性 (2)隨機地將當前數據集按照 3:1 的容量比例劃分為訓練集(用于建立模型)和測試集(用于檢測模型的預測精度),重復此步驟十次, 并將得到十次結果制作如下的折線圖,其中橫坐標為次數,縱坐標為 對應次數的可決系數。如下圖所示(可以與圖不一致,主要體現可決系數變化規律 (3)最優回歸方程的選擇:從 12 個自變量中隨機的抽取 n(其中 n=2,…..12)個自變量,并利用十折交叉驗證計算所建模型的可決系 數,依據以上 12 個模型的可決系數大小確定哪一個模型的預測精度 較高。(并不一定使用全部自變量的模型精度最好 (4)嶺回歸、Lasso 回歸模型中關鍵正則參數𝛌的選擇:在給定參數𝛌 的 0.010.10.2, 0.5, 1 這五個可能性取值的條件下,利用十折交 叉驗證和可決系數確定兩個模型的各自最優參數𝛌 (5)在最優參數𝛌的條件下的 Lasso 回歸模型、嶺回歸及使用全部 12 個自變量模型的可決系數十折交叉驗證得到的)的對比,在此數據 集上哪一個模型的精度最高呢?在取定最優參數𝛌的條件下 Lasso 回歸模型中,計算回歸系數為零的個數與全部自變量個數(即,12)的比例。 全部代碼 import numpy as np import random # import matplotlib.pyplot as plt import matplotlib import pandas as pd from pandas.plotting import scatter_matrix from sklearn.linear_model import Ridge,RidgeCV from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from matplotlib import pyplot as plt #as就是重新命名的意思 from matplotlib.font_manager import FontProperties #導入中文字體 from sklearn.linear_model import Lasso,LassoCV from sklearn.metrics import mean_squared_error import numpy as np from sklearn.model_selection import StratifiedKFold#font = FontProperties(fname=r"/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc") matplotlib.rcParams['font.family']='SimHei' matplotlib.rcParams['font.sans-serif']=['SimHei']pd_data=pd.read_csv(r"./BostonHousing2.csv",header=1) #print(pd_data)df1=pd_data[['cmedv']] df2=pd_data[['crim', 'zn', 'indus','nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b','lstat']]# #任務一: print("***************************************************************") print("任務一")dff=pd_data[['crim', 'zn', 'indus','nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b','lstat','cmedv']] plt.figure() #自變量 scatter_matrix(dff, alpha = 0.3, figsize = (14,8)); plt.grid(True) plt.savefig('cmedy') plt.show()##任務二: print("***************************************************************") print("任務二")li=[] for epoch in range(10):X_train,X_test,Y_train,Y_test = train_test_split(df2,df1,train_size=0.8) model = Ridge(alpha=0.5,fit_intercept=True)model = RidgeCV(alphas=[0.1, 1.0, 10.0]) # 通過 RidgeCV 使用交叉驗證獲取最佳參數值 model.fit(X_train,Y_train) a=model.intercept_b=model.coef_y_train_pred =model.predict(X_train)score=model.score(X_test, Y_test)li.append(score) x = list(range(1, 11, 1)) y = [round(i,2) for i in li]plt.plot(x, y, linewidth=2, color='g', marker='o',markerfacecolor='blue', markersize=3)#繪制圖片 plt.plot(x,y) plt.ylim(0, 1) # 限定縱軸的范圍for a, b in zip(x, y):plt.text(a, b, b, ha='center', va='bottom', fontsize=20) plt.title("房價預測") plt.xlabel("訓練輪數") plt.ylabel("可決系數") plt.show()#任務三 (包含任務5)#利用嶺回歸模型隨機選取變量進行十折交叉,計算可決系數 print("任務三 (包含任務5)") print("下面對變量進行隨機抽取:") X_train,X_test,Y_train,Y_test = train_test_split(df2,df1,train_size=0.8) for p in range(10):ans=random.randint(1, 12)df3 = X_train.sample(n=ans,axis=1)l=list(df3.columns)df4=pd.DataFrame(X_test,columns=l)model = Ridge(alpha=0.5,fit_intercept=True)model = RidgeCV(alphas=[0.01,0.1,0.2, 0.5, 1],normalize = True,cv=10)model.fit(df3,Y_train)ridge_best_alpha = model.alpha_ #得到最佳lambda值a=model.intercept_b=model.coef_yy_train_pred =model.predict(df3)score = model.score(df4,Y_test)print(f"第{p+1}輪,隨機抽取{ans}個變量\n嶺回歸關鍵正則參數={ridge_best_alpha},可決系數{round(score,2)}")#任務四 (包含任務5) print("*************************************************") print("任務四 (包含任務5)") print(f"嶺回歸回歸模型中關鍵正則參數𝛌的選擇:") X_train,X_test,Y_train,Y_test = train_test_split(df2,df1,train_size=0.8) model = Ridge(alpha=0.5,fit_intercept=True) model = RidgeCV(alphas=[0.01,0.1,0.2, 0.5, 1],normalize = True,cv=10) model.fit(X_train,Y_train) ridge_best_alpha = model.alpha_ #得到最佳lambda值 print(f"嶺回歸關鍵正則參數𝛌={ridge_best_alpha}")ridge = Ridge(alpha = ridge_best_alpha,normalize = True) ridge.fit(X_train,Y_train) ridge_predict = ridge.predict(X_test) mse = np.sqrt(mean_squared_error(Y_test,ridge_predict)) score=model.score(X_test, Y_test) print(f"在最優參數𝛌的條件下,損失值{round(mse,2)},可決系數:{round(score,2)}")print("*************************************************") print(f"LASSO回歸模型中關鍵正則參數𝛌的選擇:") X_train,X_test,Y_train,Y_test = train_test_split(df2,df1,train_size=0.8) lasso_cv = LassoCV(alphas = [0.01,0.1,0.2, 0.5, 1], normalize=True, cv = 10) lasso_cv.fit(X_train,pd.DataFrame(Y_train).values.ravel()) #本來需要一維向量,但是輸入為列向量,所以找到出錯的位置,應用ravel()函數即可。 lasso_best_alpha = lasso_cv.alpha_ # 取出最佳的lambda值 print(f"LASSO回歸關鍵正則參數𝛌={lasso_best_alpha}") lasso = Lasso(alpha = lasso_best_alpha, normalize=True) lasso.fit(X_train,pd.DataFrame(Y_train).values.ravel()) lasso_predict = lasso.predict(X_test) #預測 MSE = np.sqrt(mean_squared_error(Y_test,lasso_predict)) ss=model.score(X_test, Y_test) print(f"在最優參數𝛌的條件下,損失值{round(MSE,2)},可決系數:{round(ss,2)}")print("***************************************************************") print("任務五")ll=lasso.coef_ print("各變量回歸系數如下:") print(ll) ans=0 for i in ll:if abs(i)<=0.05:ans+=1 tmp=round(ans/12,2) tmp=int(tmp*100) print(f"回歸系數為零的個數與全部自變量個數比例:{tmp}%.")

總結

以上是生活随笔為你收集整理的多元统计分析——多元线性回归的全部內容,希望文章能夠幫你解決所遇到的問題。

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