python多变量非线性拟合_python实现多变量线性回归(Linear Regression with Multiple Variables)...
本文介绍如何使用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)...相关推荐
- Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”
Coursera公开课笔记: 斯坦福大学机器学习第四课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第 ...
- 机器学习之多变量线性回归(Linear Regression with multiple variables)
机器学习之多变量线性回归(Linear Regression with multiple variables) 1. Multiple features(多维特征) 在机器学习之单变量线性回归(Lin ...
- Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学 ...
- 多元线性回归(Linear regression with multiple variables)
目录 多维特征 多元的梯度下降法 特征和多项式回归 正规方程 多维特征 n:特征量(维度) m:样本数量 x(i):第 i 个样本 x(i)j:第 i 个样本的第 j 维度 多元线性回归: 多元的梯度 ...
- Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”
Coursera公开课笔记: 斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 ...
- 机器学习方法:回归(一):线性回归Linear regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 开一个机器学习方法科普系列:做基础回顾之用,学而时习之:也拿出来与大家分享.数学水平有限,只求易懂,学习与工 ...
- 复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥
复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥? 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学 ...
- Ng第二课:单变量线性回归(Linear Regression with One Variable)
二.单变量线性回归(Linear Regression with One Variable) 2.1 模型表示 2.2 代价函数 2.3 代价函数的直观理解 2.4 梯度下降 2.5 梯度下 ...
- 线性回归 Linear Regression 与逻辑回归 Logistic Regression
1 线性回归 Linear Regression 理论 线性回归模型研究多个变量x与y之间的关系,通过回归模型预测位置样本的数据. 假设函数 损失函数 损失函数寻优,最小二乘法 即: 注:最小二乘法需 ...
最新文章
- 前 Google 工程师总结的算法面试指南
- html给网页加图片背景颜色,0035 如何设置网页背景图和在网页中插入图片
- SAP Spartacus 如何重定义登录 Login Component
- Envi IDL中多元线性回归计算方法
- 8.5-Day1T1--Asm.Def 谈笑风生
- 常用的 iptables配置脚本
- php的数据结构有哪些,PHP数据结构有几种
- Unity3d Vector3
- UIControl详解
- 计算线性回归、指数回归公式
- vue3.2 lottie-web动画+引入json动画
- codeigniter.php,CodeIgniter.php在做什么
- hp服务器修改bios设置,HP 服务器进入BIOS 按键总结
- 最新BBS上的变态网名大全
- 在arm64上基于qemu的vhost user blk设备hotplug
- Nexys2七段LED显示操作
- RGB 色值与十六进制色值互转
- html网站运行天数代码,网站运行天数代码
- linux下的SNMP设置(snmp get/set/trap)
- 圆和圆柱体计算(继承)Python