import numpy as np
import pandas as pd

波士顿房价数据集字段说明

  • CRIM:房屋所在镇的犯罪率
  • ZN:面积大于25000平方英尺住宅所占的比例
  • INDUS :房屋所在镇非零售区域所占比例
  • CHAS:房屋是否位于河边 若位于河边,值为1,否则为0
  • NOX:一氧化氮的浓度
  • RM:平均房间的数量
  • AGE:1940年前建成房屋所占比例
  • DIS:房屋距离波斯顿五大就业中心的加权距离
  • RAD:距离房屋最近的公路
  • TAX:财产税额度
  • PIRATIO:房屋所在镇师生比例
  • B:计算公式(房屋所在镇非美籍人口所占比例):1000*(房屋所在镇非美籍人口所占比例-0.63)**2
  • LSTAT:弱势群体人口所占比例
  • MEDV:房间的平均价格

data=pd.read_csv(r"F:\数据集\dataset\boston.csv")
#data
#查看数据的基本信息,同时也可以用来查看,各个特征列是否存在缺失值
data.info()
#查看是否有重复值
data.duplicated().any()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 506 entries, 0 to 505
Data columns (total 15 columns):#   Column      Non-Null Count  Dtype
---  ------      --------------  -----  0   Unnamed: 0  506 non-null    int64  1   crim        506 non-null    float642   zn          506 non-null    float643   indus       506 non-null    float644   chas        506 non-null    int64  5   nox         506 non-null    float646   rm          506 non-null    float647   age         506 non-null    float648   dis         506 non-null    float649   rad         506 non-null    int64  10  tax         506 non-null    int64  11  ptratio     506 non-null    float6412  black       506 non-null    float6413  lstat       506 non-null    float6414  medv        506 non-null    float64
dtypes: float64(11), int64(4)
memory usage: 59.4 KBFalse

定义线性回归类

  • 利用正规方程解出向量θ\thetaθ:
    θ=(XTX)−1XTY\theta=(X^{T}X)^{-1}X^{T}Yθ=(XTX)−1XTY
class linearRegression:"""使用python实现的线性回归。(最小二乘法)"""def fit(self,X,y):"""根据提供的训练数据X ,对模型进行训练。Parameters:_________X:类数组类型。形状:[样本数量,特征数量]特征矩阵,用来对模型进行训练。y: 类数组类型,形状:[样本数量]"""# 将X转换成矩阵格式,注意:这里的X必须是一个完整的数组格式,不能是数组的一部分。所以这里用到X.copy()#说明:如果X是数组对象的一部分,而不是完整的对象数据(例如,X是其他对象通过切片传递过来),这是则无法完成矩阵的转换 #这里创建X的拷贝对象,避免转换矩阵的时候失败X=np.asmatrix(X.copy())# y 是一维结构(行向量或列向量),对于一维结构可以不用进行拷贝#注意:我们现在需要进行矩阵的计算,因此需要二维的结构,我们通过reshape方法进行转换#reshape(-1,1)表示根据实际情况转换成多少行(-1),一列。y=np.asmatrix(y).reshape(-1,1)#通过最小二乘公式求戒除最佳的权重值self.w_=(X.T*X).I*X.T*ydef predict(self,X):"""根据参数传递的样本X,对样本数据进行预测。Parameters:___________X:类数组类型。形状:[样本数量,特征数量]待预测的样本特征(属性)Returns:________result:数组类型预测的结果"""#将X转换成矩阵,注意,需要对X进行拷贝(理由同上)X=np.asmatrix(X.copy())result=X*self.w_#result是一个矩阵,且是二维的,所以将result转化为ndarray数组,进行扁平化(result.ravel())处理,然后返回结果#使用ravel()可以将数组进行扁平化处理return np.array(result).ravel()

不考虑截距的情况

#不考虑截距的情况
t=data.sample(len(data),random_state=0)
train_X=t.iloc[:400,:-1]
train_y=t.iloc[:400,-1]
test_X=t.iloc[400:,:-1]
test_y=t.iloc[400:,-1]
lr=linearRegression()
lr.fit(train_X,train_y)
result=lr.predict(test_X)
display(np.mean((result-test_y)**2))
#查看模型的权重值
display(lr.w_)
16.892575069960635matrix([[-2.25548227e-03],[-9.36187378e-02],[ 4.57218914e-02],[ 3.67703558e-03],[ 2.43746753e+00],[-2.96521997e+00],[ 5.61875896e+00],[-4.94763610e-03],[-8.73950002e-01],[ 2.49282064e-01],[-1.14626177e-02],[-2.50045098e-01],[ 1.49996195e-02],[-4.56440342e-01]])

考虑截距的情况

#考虑截距:增加一列,使该列的所有值都是1
t=data.sample(len(data),random_state=0)
#可以这样增加一列
#t["intercept"]=1,这是在最右边增加intercept列,且该列所有值都取1
#按照习惯,截距作为w0,我们为之而配上一个x0,x0列放在最前面
#t.columns  返回所有列的信息;insert(0,"Intercept"):将Intercept增加到第一列
new_columns=t.columns.insert(0,"Intercept")
#重新安排列的信息,如果值为空,则使用fail_value参数指定的值进行填充
t=t.reindex(columns=new_columns,fill_value=1)
#t
t=data.sample(len(data),random_state=0)
train_X=t.iloc[:400,:-1]
train_y=t.iloc[:400,-1]
test_X=t.iloc[400:,:-1]
test_y=t.iloc[400:,-1]
lr=linearRegression()
lr.fit(train_X,train_y)
result=lr.predict(test_X)
#不知为何lr.w_的值为“nan”
display(np.mean((result-test_y)**2))
#display(lr.w_)
16.892575069960635

可视化

import matplotlib as mpl
import matplotlib.pyplot as plt
#设置字体为黑体,以支持中文显示
mpl.rcParams["font.family"]="SimHei"
#设置在中文字体是,能正常显示负号(-)
mpl.rcParams["axes.unicode_minus"]=False
plt.figure(figsize=(10,10))
#绘制预测值
plt.plot(result,"ro-",label="预测值")
#绘制真实值
plt.plot(test_y.values,"go--",label="真实值")
plt.title("线性回归预测——最小二乘法")
plt.xlabel("样本序号")
plt.ylabel("房价")
plt.legend()
plt.show()


线性回归-最小二乘python实现相关推荐

  1. python做线性回归统计推断提取参数_线性回归及其Python实现(最大似然法)

    线性回归及其Python实现(最大似然法) 标签: Python 机器学习 本节内容总结于博主在牛客网机器学习特训营的笔记 参考资料:<机器学习实战> 目录 1.什么是线性回归(Linea ...

  2. 十、简单线性回归的python实现(详解)

    4. 简单线性回归的python实现 点击标题即可获取源代码和笔记 4.1 导入相关包 import numpy as np import pandas as pd import random imp ...

  3. [转载] 多元线性回归 及其Python实现

    参考链接: 线性回归(Python实现) 多元线性回归 Python实现 多元线性回归求解过程 多元线性回归的形式:  目标函数:  将一个样本的向量化: 将所有样本的向量化:  向量化后的目标函数及 ...

  4. python一元线性回归绘制_简单一元线性回归实现python

    简单一元线性回归实现python 简单一元线性回归实现python 简单一元线性回归实现python #线性回归梯度下降 import numpy as np import pandas as pd ...

  5. sklearn实现一元线性回归 【Python机器学习系列(五)】

    sklearn实现一元线性回归 [Python机器学习系列(五)] 文章目录 1.获取数据 2.线性回归模型 大家好,我是侯小啾!  本期blog分享的内容是通过sklearn库实现一元线性回归.相比 ...

  6. 线性回归-最小二乘方法代码实现

    线性回归-最小二乘方法 使用最小二乘的方法进行原始的计算方式编写 先把该导入的包全部导入了 # 首先需要导入对应的包 import pandas as pd # 数据处理 import numpy a ...

  7. 一元线性回归的Python编程实现

    这篇文章主要是为了实现周志华老师的机器学习书涉及的:单变量的线性回归,即一元线性回归的Python编程实现. 代码如下: # -*- coding: cp936 -*- from numpy impo ...

  8. python建立回归模型_简单线性回归的Python建模方法

    简单线性回归,就是两个随机变量存在一定大小的相关系数的前提下,结合散点图观察,采用最小二乘OLS方法,尝试建立一条回归直线,使得误差平方和SSE最小.OLS是一种参数方法,通过确定直线的斜率b和截距a ...

  9. 机器学习之线性回归(python)

    目录 一.基本概念 二.概念的数学形式表达 三.确定w和b 1.读取或输入数据 2.归一化.标准化 2.1 均值 2.2 归一化 2.3 标准化 3.求解w和b 1.直接解方程 2.最小二乘法(lea ...

最新文章

  1. PHP和Javascript实现转换文件大小为人性化可读方式
  2. 游戏人物标记——腾讯笔试
  3. js ajax java传参_ajax参数传递与后台接收
  4. Linux 中 ctime,mtime,atime 的区别
  5. 修改Linux内核的启动Logo和禁用启动光标
  6. leetcode 1170 python
  7. CAS4搭建HTTP环境
  8. 映美精相机的数据流转成MAT
  9. numpy.dot()和x.dot(y)函数介绍和示例
  10. word 技巧 - 删除指定页页眉
  11. UE4 碰撞射线检测
  12. 墨画子卿第一章第1节
  13. 学而思python小学生课程_幼升小之路(26) 学而思测评
  14. 串口通信那些事儿:通信电平转换电路
  15. 三十六计解释及快速记忆
  16. String字符串的相关语法及JPI
  17. OCSP在线证书状态协议内容描述
  18. weblogic11g 后台无需密码启动设置
  19. 房屋安全鉴定报告的有效期及两种鉴定类型
  20. 【Tensorflow+Keras】tf.keras.layers.LSTM的解析与使用

热门文章

  1. Xcode 自动对齐 插件
  2. 【品味人生】毕业十年有感,给年轻人的一点忠告
  3. 今生一定娶美女 不遇美女终生不娶
  4. iOS--控制器加载自定义view的xib
  5. 针对需要使用T3协议的Weblogic2628漏洞解决方案
  6. 操作系统进程间通信简述
  7. __weak 修饰符
  8. Myeclipse连接数据库删除数据库(JDBC)
  9. MySQL锁等待分析【2】
  10. [Azure] 使用 Visual Studio 2013 管理中国版 Azure 订阅