本文介绍如何使用python实现多变量线性回归,文章参考NG的视频和黄海广博士的笔记

现在对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x2,...,xn)

表示为:

引入x0=1,则公式

转化为:

1、加载训练数据

数据格式为:

X1,X2,Y

2104,3,399900

1600,3,329900

2400,3,369000

1416,2,232000

将数据逐行读取,用逗号切分,并放入np.array

#加载数据

#加载数据

def load_exdata(filename):

data = []

with open(filename, 'r') as f:

for line in f.readlines():

line = line.split(',')

current = [int(item) for item in line]

#5.5277,9.1302

data.append(current)

return data

data = load_exdata('ex1data2.txt');

data = np.array(data,np.int64)

x = data[:,(0,1)].reshape((-1,2))

y = data[:,2].reshape((-1,1))

m = y.shape[0]

# Print out some data points

print('First 10 examples from the dataset: \n')

print(' x = ',x[range(10),:],'\ny=',y[range(10),:])

First 10 examples from the dataset:

x = [[2104 3]

[1600 3]

[2400 3]

[1416 2]

[3000 4]

[1985 4]

[1534 3]

[1427 3]

[1380 3]

[1494 3]]

y= [[399900]

[329900]

[369000]

[232000]

[539900]

[299900]

[314900]

[198999]

[212000]

[242500]]

2、通过梯度下降求解theta

(1)在多维特征问题的时候,要保证特征具有相近的尺度,这将帮助梯度下降算法更快地收敛。

解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间,最简单的方法就是(X - mu) / sigma,其中mu是平均值,sigma是标准差。

(2)损失函数和单变量一样,依然计算损失平方和均值

我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。多变量线性回归的批量梯度下降算法为:

求导数后得到:

(3)向量化计算

向量化计算可以加快计算速度,怎么转化为向量化计算呢?

在多变量情况下,损失函数可以写为:

对theta求导后得到:

(1/2*m) *(X.T.dot(X.dot(theta) -y))

因此,theta迭代公式为:

theta = theta -(alpha/m) *(X.T.dot(X.dot(theta) -y))

(4)完整代码如下:

#特征缩放

def featureNormalize(X):

X_norm = X;

mu = np.zeros((1,X.shape[1]))

sigma = np.zeros((1,X.shape[1]))

for i in range(X.shape[1]):

mu[0,i] = np.mean(X[:,i]) # 均值

sigma[0,i] = np.std(X[:,i]) # 标准差

# print(mu)

# print(sigma)

X_norm = (X - mu) / sigma

return X_norm,mu,sigma

#计算损失

def computeCost(X, y, theta):

m = y.shape[0]

# J = (np.sum((X.dot(theta) - y)**2)) / (2*m)

C = X.dot(theta) - y

J2 = (C.T.dot(C))/ (2*m)

return J2

#梯度下降

def gradientDescent(X, y, theta, alpha, num_iters):

m = y.shape[0]

#print(m)

# 存储历史误差

J_history = np.zeros((num_iters, 1))

for iter in range(num_iters):

# 对J求导,得到 alpha/m * (WX - Y)*x(i), (3,m)*(m,1) X (m,3)*(3,1) = (m,1)

theta = theta - (alpha/m) * (X.T.dot(X.dot(theta) - y))

J_history[iter] = computeCost(X, y, theta)

return J_history,theta

iterations = 10000 #迭代次数

alpha = 0.01 #学习率

x = data[:,(0,1)].reshape((-1,2))

y = data[:,2].reshape((-1,1))

m = y.shape[0]

x,mu,sigma = featureNormalize(x)

X = np.hstack([x,np.ones((x.shape[0], 1))])

# X = X[range(2),:]

# y = y[range(2),:]

theta = np.zeros((3, 1))

j = computeCost(X,y,theta)

J_history,theta = gradientDescent(X, y, theta, alpha, iterations)

print('Theta found by gradient descent',theta)

Theta found by gradient descent [[ 109447.79646964]

[ -6578.35485416]

[ 340412.65957447]]

绘制迭代收敛图

plt.plot(J_history)

plt.ylabel('lost');

plt.xlabel('iter count')

plt.title('convergence graph')

使用模型预测结果

def predict(data):

testx = np.array(data)

testx = ((testx - mu) / sigma)

testx = np.hstack([testx,np.ones((testx.shape[0], 1))])

price = testx.dot(theta)

print('price is %d ' % (price))

predict([1650,3])

price is 293081

python多变量非线性拟合_python实现多变量线性回归(Linear Regression with Multiple Variables)...相关推荐

  1. Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”

    Coursera公开课笔记: 斯坦福大学机器学习第四课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第 ...

  2. 机器学习之多变量线性回归(Linear Regression with multiple variables)

    机器学习之多变量线性回归(Linear Regression with multiple variables) 1. Multiple features(多维特征) 在机器学习之单变量线性回归(Lin ...

  3. Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable

    本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学 ...

  4. 多元线性回归(Linear regression with multiple variables)

    目录 多维特征 多元的梯度下降法 特征和多项式回归 正规方程 多维特征 n:特征量(维度) m:样本数量 x(i):第 i 个样本 x(i)j:第 i 个样本的第 j 维度 多元线性回归: 多元的梯度 ...

  5. Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”

    Coursera公开课笔记: 斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 ...

  6. 机器学习方法:回归(一):线性回归Linear regression

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 开一个机器学习方法科普系列:做基础回顾之用,学而时习之:也拿出来与大家分享.数学水平有限,只求易懂,学习与工 ...

  7. 复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥

    复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥? 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学 ...

  8. Ng第二课:单变量线性回归(Linear Regression with One Variable)

    二.单变量线性回归(Linear Regression with One Variable) 2.1  模型表示 2.2  代价函数 2.3  代价函数的直观理解 2.4  梯度下降 2.5  梯度下 ...

  9. 线性回归 Linear Regression 与逻辑回归 Logistic Regression

    1 线性回归 Linear Regression 理论 线性回归模型研究多个变量x与y之间的关系,通过回归模型预测位置样本的数据. 假设函数 损失函数 损失函数寻优,最小二乘法 即: 注:最小二乘法需 ...

最新文章

  1. 前 Google 工程师总结的算法面试指南
  2. html给网页加图片背景颜色,0035 如何设置网页背景图和在网页中插入图片
  3. SAP Spartacus 如何重定义登录 Login Component
  4. Envi IDL中多元线性回归计算方法
  5. 8.5-Day1T1--Asm.Def 谈笑风生
  6. 常用的 iptables配置脚本
  7. php的数据结构有哪些,PHP数据结构有几种
  8. Unity3d Vector3
  9. UIControl详解
  10. 计算线性回归、指数回归公式
  11. vue3.2 lottie-web动画+引入json动画
  12. codeigniter.php,CodeIgniter.php在做什么
  13. hp服务器修改bios设置,HP 服务器进入BIOS 按键总结
  14. 最新BBS上的变态网名大全
  15. 在arm64上基于qemu的vhost user blk设备hotplug
  16. Nexys2七段LED显示操作
  17. RGB 色值与十六进制色值互转
  18. html网站运行天数代码,网站运行天数代码
  19. linux下的SNMP设置(snmp get/set/trap)
  20. 圆和圆柱体计算(继承)Python

热门文章

  1. 顺序表应用6:有序顺序表查询
  2. shell编程-正则表达式
  3. 是时候开始使用JavaScript严格模式了怎样启用javascri
  4. 自动生成纯文本表格的工具
  5. 软件体系架构模式之二分层体系结构
  6. kcachegrind安装
  7. wireshark的使用教程--用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的
  8. Linux内核模块编程入门
  9. c#.net常用函数和方法集
  10. 提高C++性能的编程技术笔记:临时对象+测试代码