当前位置:   article > 正文

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

pt ratio
1. 经典的线性回归分析与交叉验证
  1. examDict={' 学习时 ':[0.50, 0.75, 1.00, 1.25,1.50,1.75, 1.75,2.00, 2.25,2.50,
  2. 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 ,
  3. 48,55,75,62,73,81,76,64,82,90,93]}
  4. examDf = pd.DataFrame(examDict)
  5. X_train,X_test,Y_train,Y_test = train_test_split(exam_X,exam_Y,train_size=0.8)
  6. model = LinearRegression()
  7. model.fit(X_train,Y_train)
  8. a = model.intercept_#截距
  9. b = model.coef_#回归系数
  10. y_train_pred = model.predict(X_train) #预测
  11. score = model.score(X_test,Y_test) #可决系数 0.8866470295386657
2. 经典的多元线性回归分析的模型参数的假设检验
  1. import statsmodels.api as sm
  2. from sklearn import datasets ## 从 scikit-learn 导入数据集
  3. data = datasets.load_boston() ## 从数据集库加载波士顿数据集
  4. import numpy as np
  5. import pandas as pd
  6. df = pd.DataFrame(data.data, columns=data.feature_names)
  7. target = pd.DataFrame(data.target, columns=["MEDV"])
  8. X = df[['CRIM', 'ZN', 'INDUS']] ## X 通常表示我们的输入变量 (或自变量)
  9. y = target["MEDV"] ## Y 通常表示输出/因变量
  10. X = sm.add_constant(X) ## 我们添加一个截距(beta_0)到我们的模型
  11. model = sm.OLS(y, X).fit() ## sm.OLS(输出, 输入)
  12. predictions = model.predict(X)
  13. model.summary() ## 打印出统计模型

3. 岭回归模型

  1. X_train,X_test,Y_train,Y_test = train_test_split(df2,df1,train_size=0.8)
  2. model = Ridge(alpha=0.5,fit_intercept=True)
  3. model = RidgeCV(alphas=[0.01,0.1,0.2, 0.5, 1],normalize = True,cv=10)
  4. model.fit(X_train,Y_train)
  5. ridge_best_alpha = model.alpha_ #得到最佳lambda值
  6. print(f"岭回归关键正则参数={ridge_best_alpha}")
  7. 计算可决系数
  8. a=model.intercept_
  9. b=model.coef_
  10. y_train_pred =model.predict(X_train)
  11. score=model.score(X_test, Y_test)
  12. print(score)

4. 基于最佳lambda值建模

  1. ridge = Ridge(alpha = ridge_best_alpha,normalize = True)
  2. ridge.fit(X_train,Y_train)
  3. ridge_predict = ridge.predict(X_test)
  4. 计算损失函数
  5. rmse = np.sqrt(mean_squared_error(Y_test,ridge_predict))

5.  LASSO回归模型:

  1. lasso_cv = LassoCV(alphas = alphas, normalize=True, cv = 10, max_iter=10000)
  2. lasso_cv.fit(x_tr,y_tr)
  3. lasso_best_alpha = lasso_cv.alpha_
  4. lasso_best_alpha
  5. lasso = Lasso(alpha = lasso_best_alpha, normalize=True, max_iter=10000)
  6. lasso.fit(x_tr, y_tr)
  7. lasso_predict = lasso.predict(x_te) #预测
  8. 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 ( 修正了的自住房屋房价中位数 ) 作为 因变量 , 而将 crim zn indus nox rm age dis rad tax ptratio b lstat 12 个变量作为 自变量 。(数据详见 BostonHousing2.csv 文件 )
5. 回归任务指定
(1)利用指定的 12 个自变量与因变量 comedy 创建散布图矩阵, 要目的查看各自变量与因变量之间的相关性
(2)随机地将当前数据集按照 3:1 的容量比例划分为训练集(用于建立模型)和测试集( 用于检测模型的 预测精度 ) ,重复此步骤十次, 并将得到十次结果制作如下的折线图,其中横坐标为次数,纵坐标为 对应次数的可决系数。如下图所示( 可以与图不一致,主要体现可决 系数变化规律
(3) 最优回归方程的选择 :从 12 个自变量中随机的抽取 n (其中 n =2,…..12 )个自变量,并利用十折交叉验证计算所建模型的可决系 数,依据以上 12 个模型的可决系数大小确定哪一个模型的预测精度 较高。( 并不一定使用全部自变量的模型精度最好
(4)岭回归、 Lasso 回归模型中关键正则参数 本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签