淘宝网站首页是用什么软件做的,wordpress安装memcached,网页广告图,服务器网站建设教程目录 一、创建Pandas对象并查看数据的基本情况二、使用皮尔逊相关系数分析特征之间的相关性三、可视化不同特征与因变量MEDV#xff08;房价中值#xff09;间的相关性四、划分训练集和测试集并进行回归分析 一、创建Pandas对象并查看数据的基本情况
boston.csv数据集下载MEDV房价中值间的相关性四、划分训练集和测试集并进行回归分析 一、创建Pandas对象并查看数据的基本情况
boston.csv数据集下载 链接https://pan.quark.cn/s/fc4b2415e371 提取码ZXjU
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inlinehouse pd.read_csv(boston.csv)
print(shape, house.shape)shape (506, 14)house[:5]house.describe()CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTATMEDVcount506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000506.000000mean3.59376111.36363611.1367790.0691700.5546956.28463468.5749013.7950439.549407408.23715418.455534356.67403212.65306322.532806std8.59678323.3224536.8603530.2539940.1158780.70261728.1488612.1057108.707259168.5371162.16494691.2948647.1410629.197104min0.0063200.0000000.4600000.0000000.3850003.5610002.9000001.1296001.000000187.00000012.6000000.3200001.7300005.00000025%0.0820450.0000005.1900000.0000000.4490005.88550045.0250002.1001754.000000279.00000017.400000375.3775006.95000017.02500050%0.2565100.0000009.6900000.0000000.5380006.20850077.5000003.2074505.000000330.00000019.050000391.44000011.36000021.20000075%3.64742212.50000018.1000000.0000000.6240006.62350094.0750005.18842524.000000666.00000020.200000396.22500016.95500025.000000max88.976200100.00000027.7400001.0000000.8710008.780000100.00000012.12650024.000000711.00000022.000000396.90000037.97000050.000000
house.info()二、使用皮尔逊相关系数分析特征之间的相关性
house.corr(methodpearson)三、可视化不同特征与因变量’MEDV’房价中值间的相关性
#可视化不同特征与因变量MEDV房价中值间的相关性
fig plt.figure( figsize(8, 8), dpi100 )
plt.rcParams[font.sans-serif] [SimHei]
plt.rcParams[axes.unicode_minus] Falseplt.subplots_adjust(hspace0.35)
plt.subplot(2, 2, 1)
#s指定点的大小可用help(plt.scatter)查看帮助
plt.scatter(house[RM], house[MEDV], s1, markero, labelRM-MEDV)
plt.xlabel( r房间数 - $RM$ )
plt.ylabel( r房价 - $MEDV$ )
plt.title(r$\rho0.695360$)plt.subplot(2, 2, 2)
plt.scatter(house[LSTAT], house[MEDV], s1, markero, labelLSTAT-MEDV)
plt.xlabel( r低层人口比例 - $LSTAT$ )
plt.title(r$\rho-0.737663$)plt.subplot(2, 2, 3)
plt.scatter(house[DIS], house[MEDV], s1, markero, labelDIS-MEDV)
plt.xlabel( r距就业中心距离 - $DIS$ )
plt.ylabel( r房价 - $MEDV$ )
plt.title(r$\rho0.249929$)plt.subplot(2, 2, 4)
plt.scatter(house[CHAS], house[MEDV], s1, markero, labelCHAS-MEDV)
plt.xlabel( r河景房 - $CHAS$ )
plt.title(r$\rho0.175260$)
plt.show()选取特征’RM’(房间数)‘LSTAT’(低层人口比例)‘CHAS’(河景房)和目标’MEDV’(房价中值)形成样本数据。
house1 house[[RM,LSTAT,CHAS,MEDV]]
house1[:5]如有必要对数值型特征进行标准化。 在标准化之前要使用MinMaxScaler进行特征缩放这是一个常用的预处理步骤有助于将数据缩放到一个指定的范围内通常是[0,1]。
from sklearn.preprocessing import MinMaxScaler
mmScaler MinMaxScaler() #创建MinMaxScaler对象mmScaler.fit(house1[[RM,LSTAT]]) #对MinMaxScaler对象进行拟合以便获取特征的最小值和最大值
print(Min, mmScaler.data_min_, Max, mmScaler.data_max_)m mmScaler.transform(house1[[RM,LSTAT]]) #使用拟合好的MinMaxScaler对象对数据集进行特征缩放
# m mmScaler.fit_transform(house1[[RM,LSTAT]])
# 创建一个DataFrame来存储特征缩放后的数据同时保留原始特征CHAS和目标变量MEDV
house2m pd.DataFrame(m, columns[RM,LSTAT])
house2m[[CHAS,MEDV]] house1[[CHAS,MEDV]]
house2m[:5]使用 scikit-learn 中的StandardScaler对数据集中的特征进行标准化处理。首先使用fit方法将标准化器适配到数据上并打印出了每个特征的均值和方差。然后使用transform方法对数据进行转换将标准化后的数据保存到变量z中。接着将标准化后的特征数据与原始数据集中的其他列比如CHAS和MEDV一起合并到新的DataFrame house2z中。
from sklearn.preprocessing import StandardScaler
zScaler StandardScaler() #创建一个StandardScaler对象
zScaler.fit(house1[[RM,LSTAT]]) #使用fit方法将StandardScaler对象适配到房屋数据的RM和LSTAT特征上并计算它们的均值和方差
print(mean, zScaler.mean_, variance, zScaler.var_)z zScaler.transform(house1[[RM,LSTAT]]) #使用标准化器对RM和LSTAT特征进行标准化处理并保存到变量z中
# z zScaler.fit_transform(house1[[RM,LSTAT]])
# 创建一个新的DataFrame house2z来保存标准化后的特征数据并将CHAS和MEDV列添加到其中
house2z pd.DataFrame(z, columns[RM,LSTAT])
house2z[[CHAS,MEDV]] house1[[CHAS,MEDV]]
house2z[:5]X house2z[[RM,LSTAT,CHAS]]
X[:5]Y house2z[MEDV]
Y[:5]四、划分训练集和测试集并进行回归分析
1、划分训练集和测试集 使用train_test_split()函数用于按一定比例划分训练集和测试集。
from sklearn.model_selection import train_test_split
# X为特征数据Y为目标数据
# test_size参数指定测试集的比例这里设置为0.2表示测试集占总数据集的20%
# random_state参数用于设置随机种子相同的值得到相同的训练集和测试集划分
X_train,X_test,Y_train,Y_test train_test_split(X, Y, test_size0.2, random_state2020)
# 打印训练集和测试集的形状样本数特征数或目标数
print(X_train:, X_train.shape, Y_train:, Y_train.shape)
print(X_test:, X_test.shape, Y_test:, Y_test.shape)#help(train_test_split)2、创建一个线性回归模型并拟合训练数据 lr.coef_ 是模型的系数lr.intercept_ 是模型的截距。接下来将测试数据集的前五个样本用于预测并将预测结果与实际值一起打印出来。这样可以比较模型的预测效果。
from sklearn.linear_model import LinearRegression
#创建LinearRegression估计器对象
lr LinearRegression()
lr.fit(X_train, Y_train)
print(lr.coef_, lr.intercept_)XY_test X_test[:5].copy()
XY_test[MEDV] Y_test[:5]
XY_test[MEDV_predict] lr.predict(X_test[:5])
XY_test3、创建线性回归模型并用训练集数据进行拟合 接下来计算训练集和测试集上的R方值决定系数和均方误差MSE来评估模型的性能。R方值越接近1表示模型拟合得越好而均方误差越小表示模型的预测结果与实际值之间的偏差越小。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errorlr LinearRegression()
lr.fit(X_train, Y_train); print(lr.coef_, lr.intercept_)print(训练集R方%f % lr.score(X_train, Y_train), end)
print(训练集MSE%f % mean_squared_error( Y_train, lr.predict(X_train)))print(测试集R方%f % lr.score(X_test, Y_test), end)
print(测试集MSE%f % mean_squared_error( Y_test, lr.predict(X_test)))#help(lr.score)
#help(mean_squared_error)4、使用K折交叉验证来评估线性回归模型的性能 在每个折叠中数据被分成训练集和测试集模型在训练集上进行拟合并在测试集上进行评估。这有助于更准确地评估模型的泛化能力。在每次迭代中打印了训练集和测试集的索引拟合模型的系数和截距以及模型在测试集上的R方值和均方误差。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
lr LinearRegression()from sklearn.model_selection import KFold
kf KFold(n_splits3); n 0
for train_index, test_index in kf.split(X):n 1print(n, TRAIN, train_index.shape, TEST, test_index.shape)X1_train, X1_test X.iloc[train_index], X.iloc[test_index]Y1_train, Y1_test Y.iloc[train_index], Y.iloc[test_index]lr.fit(X1_train, Y1_train); print(lr.coef_, lr.intercept_)print(测试集R方%f % lr.score(X1_test, Y1_test), end)print(测试集MSE%f % mean_squared_error( Y1_test, lr.predict(X1_test)))使用带有随机重排和指定随机种子的K折交叉验证来评估线性回归模型。在每个折叠中将数据分为训练集和测试集并在训练集上拟合模型。
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
lr LinearRegression()
coef [0, 0, 0]; intercept 0from sklearn.model_selection import KFold
kf KFold(n_splits3, shuffleTrue, random_state2020); n 0
for train_index, test_index in kf.split(X):n 1X1_train, X1_test X.iloc[train_index], X.iloc[test_index]Y1_train, Y1_test Y.iloc[train_index], Y.iloc[test_index]lr.fit(X1_train, Y1_train)coef lr.coef_; intercept lr.intercept_lr.coef_ coef/n; lr.intercept_ intercept/n
print(lr.coef_, lr.intercept_)print(训练集R方%f % lr.score(X_train, Y_train), end)
print(训练集MSE%f % mean_squared_error( Y_train, lr.predict(X_train)))print(测试集R方%f % lr.score(X_test, Y_test), end)
print(测试集MSE%f % mean_squared_error( Y_test, lr.predict(X_test)))5、使用岭回归模型Ridge来拟合数据 使用岭回归模型Ridge来拟合数据并计算了模型在训练集和测试集上的R方和均方误差MSE。岭回归是一种常见的线性回归的正则化方法通过引入L2范数惩罚项来控制模型的复杂度有助于解决特征多重共线性问题。 设置alpha参数为1.0这是岭回归中控制正则化强度的参数。较大的alpha值意味着更强的正则化。打印岭回归模型的系数coef和截距intercept以及在训练集和测试集上的R方和MSE。
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_errorrd Ridge(alpha1.0)
rd.fit(X_train, Y_train)
print(rd.coef_, rd.intercept_)print(训练集R方%f % rd.score(X_train, Y_train), end)
print(训练集MSE%f % mean_squared_error( Y_train, rd.predict(X_train)))print(测试集R方%f % rd.score(X_test, Y_test), end)
print(测试集MSE%f % mean_squared_error( Y_test, rd.predict(X_test)))使用网格搜索GridSearchCV来对岭回归Ridge模型的正则化参数alpha进行优化并绘制了正则化系数与交叉验证的均方误差MSE之间的关系。
使用GridSearchCV来搜索不同的alpha值并选出导致最低均方误差的最佳参数。指定lamda np.linspace(0, 20, 100)作为网格搜索的候选参数范围。scoringneg_mean_squared_error表示用负均方误差作为评分标准。cv3表示使用3折交叉验证来评估每个alpha值的表现。 还计算了最佳参数对应的训练集和测试集上的R方r2_score和均方误差neg_mean_squared_error。最后用一幅图展示了不同alpha值对应的交叉验证均方误差以便直观地了解正则化强度与模型表现之间的关系。
from sklearn.linear_model import Ridge
from sklearn.metrics import r2_score
rd Ridge()from sklearn.model_selection import GridSearchCV
lamda np.linspace(0, 20, 100)
grid {alpha: lamda}
gs GridSearchCV(estimatorrd, param_gridgrid,\scoringneg_mean_squared_error, cv3)
gs.fit(X_train, Y_train)
print(gs.best_params_, -gs.best_score_)
print(训练集MSE%f % -gs.score(X_train, Y_train), end)
print(训练集R方%f % r2_score( Y_train, gs.predict(X_train)))
print(测试集MSE%f % -gs.score(X_test, Y_test), end)
print(测试集R方%f % r2_score( Y_test, gs.predict(X_test)))fig plt.figure( figsize(4, 3), dpi100 )
plt.rcParams[font.sans-serif] [SimHei]
plt.rcParams[axes.unicode_minus] False
plt.plot(lamda, -gs.cv_results_[mean_test_score], linewidth1)
plt.text(10, 31.58, r网格搜索$\alpha$, fontsize18)
plt.xlabel( r正则化系数 - $\alpha$ )
plt.ylabel( r均方误差 - $MSE$ )
plt.show()6、使用Lasso回归防止过拟合 使用了Lasso回归模型该模型是线性回归的变体带有L1正则化项。Lasso回归通过缩小回归系数的绝对值来防止过拟合最终可能导致一些系数变为零从而实现特征选择的效果。
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
# 创建了一个Lasso模型正则化参数alpha1.0最大迭代次数max_iter1000
las Lasso(alpha1.0, max_iter1000)
las.fit(X_train, Y_train)
print(las.coef_, las.intercept_) #训练模型后输出模型的系数和截距
# 计算训练集和测试集上的R方score方法和均方误差mean_squared_error
print(训练集R方%f % las.score(X_train, Y_train), end)
print(训练集MSE%f % mean_squared_error( Y_train, las.predict(X_train)))print(测试集R方%f % las.score(X_test, Y_test), end)
print(测试集MSE%f % mean_squared_error( Y_test, las.predict(X_test)))多项式特征扩展与Lasso回归结合。
PolynomialFeatures这个类用于生成多项式特征它将输入特征的所有可能的组合作为新的特征。在这里使用PolynomialFeatures(2, include_biasFalse)创建了一个二次多项式特征扩展对象并将其应用于训练集和测试集得到了扩展后的特征矩阵X_train_pf和X_test_pf。Lasso这是Lasso回归模型的调用使用默认参数alpha1.0和max_iter1000。然后使用扩展后的特征矩阵X_train_pf对模型进行拟合。输出模型系数和截距打印了模型的系数和截距这些系数对应于扩展后的特征空间中的每个特征。训练集和测试集上的评估最后分别计算了训练集和测试集上的R方值和均方误差。R方值决定系数用于评估模型对目标变量的拟合程度均方误差则衡量了模型的预测误差大小。
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import PolynomialFeaturespoly PolynomialFeatures(2, include_biasFalse)
X_train_pf poly.fit_transform(X_train)
X_test_pf poly.fit_transform(X_test)
# X_train的形状是(样本数, 特征数)而X_train_pf的形状是(样本数, 扩展后的特征数)
print(X_train, X_train.shape, X_train_pf.shape, X_train_pf.shape)las Lasso(alpha1.0, max_iter1000)
las.fit(X_train_pf, Y_train)
print(las.coef_, las.intercept_) #模型的系数和截距
# 训练集和测试集上的R方值和均方误差
print(训练集R方%f % las.score(X_train_pf, Y_train), end)
print(训练集MSE%f % mean_squared_error(Y_train, las.predict(X_train_pf)))print(测试集R方%f % las.score(X_test_pf, Y_test), end)
print(测试集MSE%f % mean_squared_error(Y_test, las.predict(X_test_pf)))