大连建设网站便民服务,义乌网站建设费用多少,北京做网站开发公司有哪些,海南学校网站建设使用弹性网络回归#xff08;Elastic Net Regression#xff09;算法来预测波士顿房屋价格。弹性网络回归是一种结合了L1和L2正则化惩罚的线性回归模型#xff0c;能够处理高维数据和具有多重共线性的特征。弹性网络回归的目标函数包括数据拟合损失和正则化项#xff1a; m… 使用弹性网络回归Elastic Net Regression算法来预测波士顿房屋价格。弹性网络回归是一种结合了L1和L2正则化惩罚的线性回归模型能够处理高维数据和具有多重共线性的特征。弹性网络回归的目标函数包括数据拟合损失和正则化项 m i n w 1 2 n ∣ ∣ y − X w ∣ ∣ 2 2 α ( λ ∣ ∣ w ∣ ∣ 1 1 2 ( 1 − λ ) ∣ ∣ w ∣ ∣ 2 2 ) min_w\frac{1}{2n}||y-Xw||^2_2\alpha(\lambda||w||_1\frac12(1-\lambda)||w||^2_2) minw2n1∣∣y−Xw∣∣22α(λ∣∣w∣∣121(1−λ)∣∣w∣∣22) 其中 y y y是目标变量向量 X X X是输入特征矩阵 w w w是模型的权重系数 n n n是样本数 α \alpha α是正则化强度参数 λ \lambda λ是 Elastic Net 混合参数用来控制L1和L2正则化项的权重。 处理数据流程 加载波士顿房屋价格数据集将特征矩阵存储为X目标变量存储为y。分割数据集为训练集和测试集。对特征矩阵进行特征缩放以避免不同特征尺度带来的问题。使用ElasticNet类来拟合训练数据并进行预测。评估模型在测试集上的性能。 from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import ElasticNet
from sklearn.metrics import mean_squared_error
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
from tqdm import tqdm
import time
def ela_net(X_tr,X_te,y_tr,alpha,l1):s StandardScaler()X_tr_s s.fit_transform(X_tr)X_te_s s.fit_transform(X_te)ela_model ElasticNet(alphaalpha,l1_ratiol1,random_state2023)ela_model.fit(X_tr_s,y_tr)y_pre ela_model.predict(X_te_s)return y_pre
data_url http://lib.stat.cmu.edu/datasets/boston
raw_df pd.read_csv(data_url, sep\s, skiprows22, headerNone)
data np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target raw_df.values[1::2, 2]
X, y data, target
X_tr, X_te, y_tr, y_te train_test_split(X, y, test_size0.3, random_state2023)
best_a,best_l,min_res 0,0,float(inf)
for i in tqdm(np.arange(0.1,1,0.1).round(1)):time.sleep(0.5)for j in np.arange(0.1,1,0.1).round(1):# print(i)y_pre ela_net(X_tr,X_te,y_tr,i,j)mes mean_squared_error(y_pre,y_te)if mes min_res:min_res mesbest_a,best_l i,jprint(mes)
print(alpha:,best_a,,lambda:,best_l,,mse:,min_res)目标是使用Lasso回归算法来建立一个预测模型通过输入特征预测房屋价格中位数。Lasso回归是一种线性回归的扩展方法它通过加入L1正则化项来进行特征选择和模型参数的压缩。Lasso回归的优化目标函数如下 m i n ( ∑ i − 1 n ( y i − y i ^ ) 2 α ∑ j − 1 p ∣ β j ∣ ) min(\sum_{i-1}^n(y_i-\hat{y_i})^2\alpha\sum_{j-1}^p|\beta_j|) min(i−1∑n(yi−yi^)2αj−1∑p∣βj∣) 其中 n n n 是样本数量 p p p 是特征数量 y i {y_i} yi 是实际观测值 y ^ i \hat{y}_i y^i 是预测值 β j \beta_j βj 是模型参数系数 α \alpha α 是L1正则化项的权重。L1正则化项通过在优化过程中将某些模型参数变为0来实现特征选择的作用。较大的 α \alpha α 值将更多的系数压缩到零从而选择出更少的特征。较小的 α \alpha α 值将保留更多的特征。 通过生成一个惩罚函数是回归模型中的变量系数进行压缩达到防止过度拟合解决严重共线性的问题。Lasso回归通过引入L1正则化 (即Lasso惩罚项)可以将系数向量中小的权重变为0从而实现特征选择和模型稀疏性。Lasso回归具备如下几个作用。 **特征选择**Lasso回归可以用于选择最重要的特征。它通过在优化目标函数中添加一项惩罚项L1正则化来实现稀疏性使得系数向量中很多特征的权重变为0。通过选择非零系数对应的特征可以筛选出对目标变量有最大预测能力的特征从而简化模型提高模型的泛化能力。**多重共线性问题**在研究中往往存在多个相关的自变量。Lasso回归可以通过自变量之间的相关关系将相关的自变量的系数变为0从而降低多重共线性对回归结果的影响。**解释模型**Lasso回归可以用于解释模型中的变量对目标变量的影响。通过系数的大小和正负可以了解特定特征对目标变量的正向或负向影响程度。 正则化的本质可以定义为我们对训练算法所做的任何改变以减少泛化误差而不是训练误差。有许多正则化策略。有的对模型进行了额外的约束如对参数值进行约束;有的对目标函数进行了额外的约束可以认为是对参数值进行了间接约束或软约束。 模型预测流程 导入数据集并进行数据预处理。数据标准化 / 归一化的作用 提升模型精度标准化 / 归一化使不同维度的特征在数值上更具比较性提高分类器的准确性。提升收敛速度对于线性模型数据归一化使梯度下降过程更加平缓更易正确的收敛到最优解。 拆分数据集为训练集和测试集。初始化Lasso回归模型并训练模型。评估模型在测试集上的性能。调整超参数来改善模型性能。 StandardScaler标准化数据减去均值然后除以标准差经过处理后数据符合标准正态分布即均值为0标准差为1适用于本身服从正态分布的数据基本可用于有outlier的情况但在计算方差和均值时outliers仍然会影响计算。 MinMaxScaler区间缩放基于最大最小值将数据转换到0,1区间上的转换函数x (x-min) / (max-min)适用于分布范围较稳定的数据当新数据的加入导致max/min变化则需重新定义因为outlier会影响最大值或最小值因此对outlier非常敏感。 RobustScaler使用具有鲁棒性的统计量缩放带有异常值离群值的数据该缩放器删除中位数并根据百分位数范围默认值为IQR四分位间距缩放数据适用于包含许多异常值的数据x(x-median)/(p75-p25)默认使用第一个四分位数25%分位数和第3个四分位数75%分位数之间的范围。 sklearn.metrics【指标】 【分类指标】1.accuracy_score(y_true,y_pre) : 精度2.auc(x, y, reorderFalse) : ROC曲线下的面积;较大的AUC代表了较好的performance3.average_precision_score(y_true, y_score, average‘macro’, sample_weightNone):根据预测得分计算平均精度(AP)4.brier_score_loss(y_true, y_prob, sample_weightNone, pos_labelNone):The smaller the Brier score, the better.5.confusion_matrix(y_true, y_pred, labelsNone, sample_weightNone):通过计算混淆矩阵来评估分类的准确性 返回混淆矩阵6.f1_score(y_true, y_pred, labelsNone, pos_label1, average‘binary’, sample_weightNone): F1值。F1 2 * (precision * recall) / (precision recall) precision(查准率)TP/(TPFP) recall(查全率)TP/(TPFN)7.log_loss(y_true, y_pred, eps1e-15, normalizeTrue, sample_weightNone, labelsNone)对数损耗又称逻辑损耗或交叉熵损耗8.precision_score(y_true, y_pred, labelsNone, pos_label1, average‘binary’,) 查准率或者精度 precision(查准率)TP/(TPFP)9.recall_score(y_true, y_pred, labelsNone, pos_label1, average‘binary’, sample_weightNone)查全率 recall(查全率)TP/(TPFN)10.roc_auc_score(y_true, y_score, average‘macro’, sample_weightNone)计算ROC曲线下的面积就是AUC的值the larger the better11.roc_curve(y_true, y_score, pos_labelNone, sample_weightNone, drop_intermediateTrue)计算ROC曲线的横纵坐标值TPRFPRTPR TP/(TPFN) recall(真正例率敏感度) FPR FP/(FPTN)(假正例率1-特异性)【回归指标】1.explained_variance_score(y_true, y_pred, sample_weightNone, multioutput‘uniform_average’)回归方差(反应自变量与因变量之间的相关程度)2.mean_absolute_error(y_true, y_pred, sample_weightNone, multioutput‘uniform_average’)平均绝对误差3.mean_squared_error(y_true, y_pred, sample_weightNone, multioutput‘uniform_average’)均方差4.median_absolute_error(y_true, y_pred) 中值绝对误差5.r2_score(y_true, y_pred, sample_weightNone, multioutput‘uniform_average’) R平方值 相关指数 R 2 R^{2} R2 表示一元多项式回归方程拟合度的高低或者说表示一元多项式回归方程估测的可靠程度的高低。总体平方和Total Sum of Squares T S S ∑ i 1 n ( y i − y i ˉ ) 2 TSS\sum_{i1}^{n}\left ( y_{i}-\bar{y_{i}} \right )^{2} TSS∑i1n(yi−yiˉ)2回归平方和Explained Sum of Squares E S S ∑ i 1 n ( y i ^ − y i ˉ ) 2 ESS\sum_{i1}^{n}\left ( \hat{y_{i}}-\bar{y_{i}} \right )^{2} ESS∑i1n(yi^−yiˉ)2残差平方和Residual Sum of Squares R S S ∑ i 1 n ( y i − y i ^ ) 2 RSS\sum_{i1}^{n}\left ( y_{i}-\hat{y_{i}} \right )^{2} RSS∑i1n(yi−yi^)2。三者关系TSS ESS RSSY的观测值围绕其均值的总离差(total variation)可分解为两部分一部分来自回归线(ESS)另一部分则来自随机势力(RSS)。在给定样本中TSS不变如果实际观测点离样本回归线越近则ESS在TSS中占的比重越大因此定义拟合优度回归平方和ESS与Y的总离差TSS的比值。即 R 2 E S S T S S 1 − R S S T S S R^{2} \frac{ESS}{TSS} 1-\frac{RSS}{TSS} R2TSSESS1−TSSRSS 。在线性回归模型中 R 2 R^{2} R2 表示解释变量对于预测变量变化的贡献率。 R 2 R^{2} R2 越接近于1表示回归的效果越好。因此 R 2 R^2 R2 越大意味着残差平方和 ∑ i 1 n ( y i − y i ^ ) 2 \sum_{i1}^{n}\left ( y_{i}-\hat{y_{i}} \right )^{2} ∑i1n(yi−yi^)2 越小即模型的拟合效果越好 R 2 R^2 R2 越小残差平方和越大即模型的拟合效果越差。sklearn.metrics.r2_score(y_true, y_pred, sample_weightNone, multioutput’uniform_average’) y_true真实值。y_pred预测值。sample_weight样本权重。multioutput多维输入输出可选‘raw_values’, ‘uniform_average’, ‘variance_weighted’或None。默认为’uniform_average’;‘variance_weighted’对所有输出的分数进行平均并根据每个输出的方差进行加权。‘raw_values’对每一对应列求其R2指数返回一个与列数相同的一维数组。 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data_url http://lib.stat.cmu.edu/datasets/boston
raw_df pd.read_csv(data_url, sep\s, skiprows22, headerNone)
data np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target raw_df.values[1::2, 2]
print(data.shape,\t,target.shape)
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import RobustScaler
X_train,X_test,y_train,y_test train_test_split(data,target,test_size0.3,random_state2023)
# ro RobustScaler()
# X_train_r ro.fit_transform(X_train)
# X_test_r ro.fit_transform(X_test)
from sklearn.linear_model import Lasso
def lasso_net(alpha):model Lasso(alphaalpha)model.fit(X_train,y_train)y_pre model.predict(X_test)return y_pre
from sklearn.metrics import r2_score
max_r , best_a 0,0
for i in np.arange(0.1,1,0.1).round(1):r2 r2_score(lasso_net(i),y_test)if r2max_r:max_r r2best_a iprint(r2)
las Lasso(best_a)
las.fit(X_train, y_train)
# 绘制特征系数变化图
features [CRIM,ZN,INDUS,CHAS,NOX,RM,AGE,DIS,RAD,PTRATIO,B,LSTAT,MEDV]
plt.plot(range(data.shape[1]), las.coef_)
plt.xticks(range(data.shape[1]), features, rotation90)
# 设置数字标签
for a, b in zip(range(data.shape[1]), las.coef_):plt.text(a, b, b.round(2), hacenter, vabottom, fontsize12)
plt.xlabel(Features)
plt.ylabel(Coefficients)
plt.title(Lasso Regression Coefficients)
plt.show()岭回归是一种用于处理多重共线性问题的线性回归方法它通过对模型的系数进行约束可以提高模型的稳定性和泛化能力。岭回归通过在损失函数中添加一个L2正则化项来控制模型的复杂度。L2正则化项基于模型的系数向量的平方和来惩罚大的系数值从而有效地减小模型的过拟合风险。 λ ∑ j − 1 p w j 2 \lambda\sum_{j-1}^pw^2_j λj−1∑pwj2 其中 λ \lambda λ 是我们定义的正则化参数 p p p 是特征的数量 w j w_j wj 是第 j j j 个特征的系数。岭回归的目标是最小化以下损失函数 l o s s M S E λ ∑ j − 1 p w j 2 lossMSE\lambda\sum_{j-1}^pw^2_j lossMSEλ∑j−1pwj2。这里的 MSE \text{MSE} MSE 是均方误差即预测值与真实值之间的平方差的平均值。通过添加正则化项岭回归通过权衡模型的拟合能力和稳定性来提高泛化能力。 数据处理步骤 导入必要的库和数据集数据探索和预处理拆分数据集为特征矩阵 X 和目标向量 y归一化特征矩阵 X使用岭回归模型进行训练和预测评估模型性能 from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
data_url http://lib.stat.cmu.edu/datasets/boston
raw_df pd.read_csv(data_url, sep\s, skiprows22, headerNone)
data np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target raw_df.values[1::2, 2]
Xtrain,Xtest,ytrain,ytest train_test_split(data,target)
from sklearn.preprocessing import StandardScaler
s StandardScaler()
Xtrains s.fit_transform(Xtrain)
Xtests s.fit_transform(Xtest)
from sklearn.linear_model import Ridge
def ri_net(xt,yt,xtest,alpha):ri Ridge(alphaalpha)ri.fit(xt,yt)y_pre ri.predict(xtest)return y_pre
from sklearn.metrics import mean_absolute_percentage_error,r2_score,mean_squared_error
for i in np.arange(0.1,2,0.1):ym ri_net(Xtrains,ytrain,Xtests,i)print(mean_absolute_percentage_error(ytest,ym),r2_score(ytest,ym),mean_squared_error(ytest,ym)) 岭回归模型通过引入正则化项来对线性回归模型进行约束以避免过拟合。使用了 Scikit-learn 中的 Ridge 类来实现岭回归并使用均方误差来评估模型的性能。 使用多项式回归模型来学习这些特征和价格之间的关系并预测新的房屋价格。多项式回归是一种回归分析中使用的方法可以通过拟合一个关于自变量的多项式来预测因变量的数值。与简单线性回归模型只使用一个自变量不同多项式回归模型可以使用多个自变量来进行拟合。通过引入高次特征变量多项式回归模型可以更好地适应非线性关系。多项式回归模型的一般形式可以表示为 Y θ 0 θ 1 X θ 2 X 2 … θ n X n Y \theta_0 \theta_1X \theta_2X^2 \ldots \theta_nX^n Yθ0θ1Xθ2X2…θnXn 其中 Y Y Y表示因变量 X X X表示自变量 θ 0 , θ 1 , … , θ n \theta_0, \theta_1, \ldots, \theta_n θ0,θ1,…,θn表示模型的参数 n n n表示多项式的阶数。假设我们有一组自变量 X { x 1 , x 2 , … , x m } X \{x_1, x_2, \ldots, x_m\} X{x1,x2,…,xm} 和对应的因变量 Y { y 1 , y 2 , … , y m } Y \{y_1, y_2, \ldots, y_m\} Y{y1,y2,…,ym}我们的目标是找到最佳拟合的二次多项式曲线。 Y θ 0 θ 1 X θ 2 X 2 Y \theta_0 \theta_1X \theta_2X^2 Yθ0θ1Xθ2X2。为了找到最佳拟合的参数值 θ 0 , θ 1 , θ 2 \theta_0, \theta_1, \theta_2 θ0,θ1,θ2我们可以使用最小二乘法。我们需要最小化残差平方和RSS R S S ∑ i 1 m ( y i − y ^ i ) 2 RSS \sum_{i1}^{m}(y_i - \hat{y}_i)^2 RSSi1∑m(yi−y^i)2 其中 y i y_i yi是观测到的因变量值 y ^ i \hat{y}_i y^i 是根据模型得到的预测值。 计算流程 导入必要的库和数据集从数据集中加载数据提取特征变量和目标变量使用多项式回归模型进行拟合预测新的房屋价格计算模型的性能指标如均方误差绘制原始数据散点图和拟合曲线图 from sklearn.metrics import r2_score
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
import pandas as pd
data_url http://lib.stat.cmu.edu/datasets/boston
raw_df pd.read_csv(data_url, sep\s, skiprows22, headerNone)
data np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target raw_df.values[1::2, 2]
poly PolynomialFeatures(degree3)
X_p poly.fit_transform(data)
model LinearRegression()
model.fit(X_p,target)
y_p model.predict(X_p)
r2 r2_score(target,y_p)
print(r2)使用PolynomialFeatures类将原始特征向量X转换为多项式特征向量X_poly。使用LinearRegression类构建多项式回归模型并进行拟合。