导入所需要的库

import numpy as np
import pandas as pd
from matplotlib import font_manager as fm, rcParams
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split # 用于分割数据集

将sklearn中的data数据转换成csv

import pandas as pd
from sklearn.datasets import load_bostonboston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston['target']
df.to_csv('./boston.csv', index=None) # 存储为csv文件

读取csv文件

data = pd.read_csv(r'./boston.csv')

梯度缩放

提高梯度下降的收敛速度,使得data处于[0, 1]之间

data = (data - data.mean()) / data.std() # 特征放缩 (x-平均值)/标准差

公式如下:

将X和y从数据集中分离出来

cols = data.shape[1] # 表示data的列数
X = data.iloc[:,0:cols-1]
y = data.iloc[:,cols-1:cols]

数据集的分割

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=10)

梯度下降

将数据转换成矩阵

# 将数据转换成numpy矩阵
X_train = np.matrix(X_train.values)
y_train = np.matrix(y_train.values)
X_test = np.matrix(X_test.values)
y_test = np.matrix(y_test.values)

初始化θ矩阵

theta = np.matrix([0,0,0,0,0,0,0,0,0,0,0,0,0,0])

添加偏置列

# 添加偏置列,值为1,axis=1 添加列
X_train = np.insert(X_train,0,1,axis=1)
X_test = np.insert(X_test,0,1,axis=1)

构建代价函数

# 代价函数
def CostFunction(X, y, theta):inner = np.power(X*theta.T-y,2)return np.sum(inner)/(2*len(X))

公式如下:

构建正则化代价函数

# 正则化代价函数
def regularizedcost(X, y, theta, l):reg = (l/(2*len(X))) * (np.power(theta, 2).sum())return CostFunction(X,y,theta) + reg

公式如下:

设置相关函数

alpha = 0.01 # 设置学习率
epoch = 1000 # 设置迭代步数
l = 50 # 正则化参数

构建梯度下降函数

# 梯度下降
def GradientDescent(X, y, theta, l, alpha, epoch):temp = np.matrix(np.zeros(np.shape(theta))) # 定义临时矩阵存储thetaparameters = int(theta.flatten().shape[1]) # 参数θ的数量cost = np.zeros(epoch) # 初始化一个ndarray,包含每次epoch的costm = X.shape[0] # 样本数量mfor i in range(epoch):# 利用向量化一步求解temp = theta -  (alpha / m) * (X * theta.T - y).T * X - (alpha * l / m) * thetatheta = tempcost[i] = regularizedcost(X, y, theta, l) # 记录每次迭代后的代价函数值return theta, cost

θ的更新函数:

预测模型

# 运行梯度下降算法,并得出最终拟合的theta值 代价函数J(θ)
final_theta, cost = GradientDescent(X_train, y_train, theta, l, alpha, epoch)
print(final_theta)

模型评估

y_hat_train = X_train * final_theta.T
y_hat_test = X_test * final_theta.T
mse = np.sum(np.power(y_hat_test - y_test, 2)) / len(X_test)
rmse = np.sqrt(mse)
R2_train = 1 - np.sum(np.power(y_hat_train - y_train,2)) / np.sum(np.power(np.mean(y_train) - y_train,2))
R2_test = 1 - np.sum(np.power(y_hat_test - y_test,2)) / np.sum(np.power(np.mean(y_test) - y_test,2))
print('MSE = ',mse)
print('RMSE = ',rmse)
print('R2_train = ',R2_train)
print('R2_test = ',R2_test)

Result:

绘制图形观察梯度下降的情况

fig, ax = plt.subplots(figsize=(20,10))
ax.plot(np.arange(epoch), cost, 'r') # np.arange()返回等差数组
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('The effect of Training Epoch')
plt.show()

Result:


希望这篇文章对大家的学习有所帮助!

python数据分析项目实战波士顿房价预测——手写梯度下降法相关推荐

  1. Python机器学习/数据挖掘项目实战 波士顿房价预测 回归分析

    Python机器学习/数据挖掘项目实战 波士顿房价预测 回归分析 此数据源于美国某经济学杂志上,分析研究波士顿房价( Boston HousePrice)的数据集. 在这个项目中,你将利用马萨诸塞州波 ...

  2. 使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】

    使用Python和Numpy进行波士顿房价预测任务–详解 目录: 一.数据处理 (1)读入数据 (2)数据形状变换 (3)数据集划分 (4)数据归一化处理 (5)封装成load data函数 二.模型 ...

  3. 机器学习项目实践——波士顿房价预测

    基于线性回归预测波士顿房价 摘要:分类和回归属于机器学习领域有监督学习算法的两种方法,有监督学习是通过已有的训练样本去训练得到一个模型,再使用这个模型将所有的输入映射到相应的输出,若输出结果是离散型称 ...

  4. kaggle房价预测特征意思_Kaggle实战-波士顿房价预测

    本文数据集来自Kaggle波士顿房价预测项目https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data 1.数据 ...

  5. 福布斯系列之数据采集 | Python数据分析项目实战

    1 数据采集概述 开始一个数据分析项目,首先需要做的就是get到原始数据,获得原始数据的方法有多种途径.比如: 获取数据集(dataset)文件 使用爬虫采集数据 直接获得excel.csv及其他数据 ...

  6. 使用Python和Numpy进行波士顿房价预测任务(一)【深度学习入门_学习笔记】

    波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的"Hello World".和大家对房价的普遍认知相同,波士顿地区的房价是由诸多因素影响的. 下载数据集:https:// ...

  7. 机器学习入门实战---波士顿房价预测

    波士顿房价预测 波士顿房价数据集介绍 波士顿房价数据说明:此数据源于美国某经济学杂志上,分析研究波士顿房价( Boston HousePrice)的数据集.数据集中的每一行数据都是对波士顿周边或城镇房 ...

  8. 福布斯系列之数据分析思路篇 | Python数据分析项目实战

    福布斯每年都会发布福布斯全球上市企业2000强排行榜(Forbes Global 2000),这个排行榜每年发布的时候,国内外总有新闻会热闹的讨论一番,但很少见到比较全面的分析. 因此才有了这样一个想 ...

  9. python数据分析项目实战—————链家北京租房数据统计分析

    链家北京租房数据分析 1.读取数据 import pandas as pd import matplotlib.pyplot as plt import numpy as npdata_dframe ...

最新文章

  1. Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)...
  2. Win7下删除FOXMAIL右键发送到选项
  3. 项目中常用的 19 条 MySQL 优化总结
  4. ant安装过程,配置过程
  5. C# WinForm 自定义控件,DataGridView背景透明,TabControl背景透明
  6. 活动报名 | PaddlePaddle Hackathon飞桨黑客马拉松邀你参加
  7. boost::mp11::mp_defer相关用法的测试程序
  8. 计算机课题推荐人意见,课题推荐人意见怎么写
  9. 关于本地共享文件夹会话连接时间
  10. IIS6.0,Apache低版本,PHP CGI 解析漏洞
  11. 与众不同 windows phone (36) - 8.0 新的瓷贴: FlipTile, CycleTile, IconicTile
  12. mysql 指定tcpip连接数_tcp ip连接数据库
  13. 聚合maven+spring-boot打包可执行jar
  14. 用标准C编写COM dll
  15. tp3.2 批量插入
  16. 服务器一定要改默认端口
  17. Android5.0免Root截屏,录屏
  18. 使用FFMPEG合并视频
  19. 嵌入式大佬 | 嵌入式C语言知识点万字总结
  20. 【数据分析入门】R语言绘图语句总结

热门文章

  1. lightroom安卓_如何将Lightroom从PC预设导入手机(安卓amp;iOS)
  2. 区块链如何分析这些涨涨跌跌
  3. ppi 各代iphone_从iPhone 6到iPhone X:居然隐藏了这么多秘密
  4. 上海交通大学python实践教程答案_python实践教程答案(求python课后习题答案)
  5. (私人收藏)植物大战僵尸游戏角色素材集成包(用于练习)
  6. 软件系统产品信息安全功能点要求
  7. java基于ssm+vue网上考试报名系统 element
  8. STM32LL库——USART中断接收不定长信息
  9. 查询整体的字体族(设置字体样式) - iOS
  10. Python案例:围棋的状态数