# 机器学习-sklearn实现线性回归模型对波士顿房价进行预测 **Repository Path**: ABigWildCat/machine-learning ## Basic Information - **Project Name**: 机器学习-sklearn实现线性回归模型对波士顿房价进行预测 - **Description**: sklearn实现线性回归模型对波士顿房价进行预测 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 15 - **Forks**: 0 - **Created**: 2023-02-27 - **Last Updated**: 2024-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 机器学习-sklearn实现线性回归模型对波士顿房价进行预测 #### 介绍 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。基于sklearn和numpy分别实现线性回归模型、逻辑回归模型、支持向量机、决策树、随机森林、集成学习、神经网络等在具体数据集上的代码实现。 机器学习算法编写流程: ![机器学习算法编写流程](image0.png) #### 配置软件环境 1. 安装 Python 及开发环境。 2. 安装 NumPy、Pandas、Matplotlib 库 3. 安装 Scikit-Learn、pytorch 库。 #### Scikit-Learn 库介绍与内容查询 Scikit 又称 Scikit-learn 库(简称 sklearn)是一个通用型开源机器学习库,它几乎涵盖了所有机器学习算法,并且搭建了高效的数据挖掘框架。 1. sklearn.datasets:加载获取流行数据集。 (1)datasets.load_*():获取小规模数据集,数据包含在 datasets 里。 sklearn.datasets.load_boston():加载并返回波士顿房价数据集,样本数量 506,特征 13。 (2)datasets.fetch_*(data_home=None):获取大规模数据集,需要从网络上下载,函数的第一个参数是 data_home,表示数据集下载的目录,默认是~/scikit_learn_data/。 (3)数据集返回值介绍 load 和 fetch 返回的数据类型是 datasets.base.Bunch(字典格式) ●data:特征数据数组,是[n_samples*n_features]的二维 numpy.ndarray 数组。 ●target:标签数组,是[n_samples,]的一维 numpy.ndarray 数组。 ●DESCR:数据描述。 ●feature_names:特征名。 ●target_names:标签名。 2. 数据集划分机器学习一般的数据集会划分为两个部分: ●训练数据:用干训练,构建模型。 ●测试数据:在模型检验时使用,用于评估模型的泛化能力。 (1)划分比例: 训练集:70%、80%、75%。 测试集:30% 、20%、25% (2)数据集划分 API 介绍 数据集划分方法有很多,如留出法、交叉法、自助法等。这里我们先介绍 sklearn 提供的留出法 , 在 model_selection 模块中提供了 train_test_split 方法,可以设定数据划分数据集比例,并且保持类别标签比例不变,进行数据集划分。 sklearn.model_selection.train_test_split(*arrays,*options) *arrays: ●X:数据集的特征值。 ●y:数据集的标签值。 注意:若输入多个数组,数组的 shape[0]要相同,否则报错。 *options: ●test size:测试集的大小,一般为 float。默认为 0.25。 ●random state:随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。 ●shuffle:是否打乱顺序。在进行数据集划分之前是否打乱数据顺序。默认为 True。 ●stratify:分层采样。划分数据集时,是否与整个数据集中的标签比例一致。默认为 None。 *Returns(函数返回值): 训练集特征值 X_train,测试集特征值 X_test,训练标签 y_train,测试标签 y_test。 #### 代码内容说明 1. 采用 scikit-learn 中的 LinearRegression(最小二乘)线性回归模型对波士顿房价进行预测,分别使用正则方程和随机梯度下降方法建模。 (1)导入数据 a)查看数据集的描述、特征名、标签名、数据样本量等信息。 b)获取样本的特征数据和标签数据。 (2)划分数据(分成训练集和测试集) (3)数据归一化 (4)训练模型 a)使用 sklearn 中线性回归的正规方程(LinearRegression)优化方法建模。 b)使用 sklearn 中线性回归的随机梯度下降(SGDRegressor)优化方法建模。 (5)模型评估(2 个模型) 评价指标:MSE 和 $R^2$值 2. 将得到的模型用于加利福尼亚房价数据集进行预测。数据集:sklearn.datasets.fetch_california_housing 只需要修改参数 data_name 为 california 即可~ #### 使用说明 需要在参数空间def get_arguments()中更改参数,选择不同的数据集、、训练集测试集划分比例、随机数种子、正则化方式、线性回归模型、损失函数等。 ![参数空间](image1.png) 1. '--data_name',选择不同的数据集,可选择'boston', 'california',赋给default(即 default='boston' 选择波士顿房价数据集,default= 'california' 选择加利福尼亚房价数据集) 2. '--test_size', 训练集测试集划分比例,设置default=0.33, 即训练集的比例为33%,可根据需求修改 3. '--random_state', 随机数种子,default=42, 划分数据集的随机种子数为42,可根据需求修改 4. '--normalization',正则化方式,可选择 '0: no normalization,' '1: rescale the data to [0, 1],' '2: rescale the data to [-1, 1],' '3: z-score normalization',即不需要正则化、最大最小标准化(将数值放缩到[0, 1]、数值放缩到[-1, 1])、z-score 标准化,可根据需求修改 5. '--Regression',线性回归模型,可选择''1: normal equation of LinearRegression,' '2: SGD LinearRegression,' '3: Ridge Regression,' '4: Lasso Regression,' '5: Polynomial Regression',即LinearRegression,还有 随机梯度下降SGD、Ridge(岭回归)、 Lasso、Polynomial regression(多项式回归)等模型,可根据需求选择赋给default 6. '--loss',损失类型,评价指标:MSE 和 $R^2$值,可根据需求修改 7. '--max_iteration',int,最大迭代次数,默认 200,本代码用设置1000,可根据需求修改 8. '--eta0',随机梯度下降算法(SGDRegressor)的学习率,本代码用设置0.01,可根据需求修改 6. '--alpha',float,L2 正则化项的强度(L2 正则化项在添加到损失时除以样本大小),本代码用设置0.5,可根据需求修改 7. '--degree',Polynomial regression(多项式回归)的阶数,只本代码用设置2,可根据需求修改 #### sklearn实现线性回归模型对波士顿房价进行预测-实现结果 1. 设置参数 test_size=0.33、random_state=42、normalization=3(数据归一化方式为 z-score标准化)、采用梯度下降算法拟合数据、损失函数使用 R2计算,多项式特征 degree=2、alpha=0.5。代码运行展示得到的数据集的描述、特征名、标签名、数据样本量等信息、线性模型的参数、模型 train loss 和 test loss 如下。 ![输入图片说明](image2.png) ![输入图片说明](image3.png) 2. 可通过修改参数空间中的参数,选择不同的方法进行对比: 对比使用数据归一化和不使用数据归一化,正规方程和梯度下降算法性能是否有差异 修改随机梯度下降算法(SGDRegressor)的学习率(eta0),观察参数对模型性能的影响 计算模型在训练样本上性能和在测试样本上的性能,判断模型是过拟合还是欠拟合 数据集划分不同对模型性能是否有影响 使用其他线性回归模型,线性回归模型中除了 LinearRegression,还有 Ridge(岭回归)、Lasso、Polynomial regression(多项式回归)等模型,观察不同模型训练后的模型权重差异 ![输入图片说明](image4.png)