- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现正则化线性回归。数据可以在这里找到:https://onedrive.live.com/?cid=506A31CDF6E4A865&id=506A31CDF6E4A865%21107&parId=root&o=OneUp
我的代码如下:
import numpy as np
import scipy.optimize as optimize
from scipy.io import loadmat
data = loadmat('ex5data1.mat')
X = data['X']
X = np.insert(X, 0, 1, axis=1)
y = data['y']
theta = np.ones((2, 1))
def cost_function(theta, X, y, reg_param):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
m = y.shape[0]
h = X * theta
error = np.power((h - y), 2)
error = np.sum(error)
term = error / (2*m)
reg = (reg_param * np.sum(np.power(theta[1:, :], 2))) / (2*m)
return term + reg
print "Cost function: \n %s" % (cost_function(theta, X, y, 1))
def cost_function_gradient(theta, X, y, reg_param):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
m = y.shape[0]
grad = np.zeros((len(X[0]) + 1, 1))
reg = np.multiply(theta[1:, :], reg_param/m)
for j in xrange(len(X[0])):
term = np.multiply((X * theta) - y, X[:, j + 1])
term = np.sum(term) / m
grad[j + 1, 0] = term + reg
grad[0, 0] = np.sum(np.multiply((X*theta - y), X[:, 0])) / m
return grad
print "Cost function gradient: \n %s" % (cost_function_gradient(theta, X, y, 1))
reg_param = 1
opt = optimize.fmin_cg(cost_function, theta, args=(X, y, reg_param), maxiter=200)
我的问题
在我开始尝试优化参数以最小化成本函数之前,cost_function() 和 cost_function_gradient() 函数工作正常,输出正确的结果。但是,然后我开始优化参数,出现以下错误:
Traceback (most recent call last):
File "ex5.py", line 49, in <module>
opt = optimize.fmin_cg(cost_function, theta, args=(X, y, reg_param), maxiter=200)
File "/Users/Olly/anaconda2/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 1177, in fmin_cg
res = _minimize_cg(f, x0, args, fprime, callback=callback, **opts)
File "/Users/Olly/anaconda2/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 1228, in _minimize_cg
gfk = myfprime(x0)
File "/Users/Olly/anaconda2/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 292, in function_wrapper
return function(*(wrapper_args + args))
File "/Users/Olly/anaconda2/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 688, in approx_fprime
return _approx_fprime_helper(xk, f, epsilon, args=args)
File "/Users/Olly/anaconda2/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 622, in _approx_fprime_helper
f0 = f(*((xk,) + args))
File "/Users/Olly/anaconda2/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 292, in function_wrapper
return function(*(wrapper_args + args))
File "ex5.py", line 17, in cost_function
h = X * theta
File "/Users/Olly/anaconda2/lib/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 309, in __mul__
return N.dot(self, asmatrix(other))
ValueError: shapes (12,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
所以看来,当 fmin_cg() 函数启动时,X 和 theta 的尺寸会以不同的方式更改/使用。我尝试在应用 fmin_cg() 之前将 X、y 和 theta 更改为矩阵,但这并没有改变任何内容。
有人可以解释一下为什么它在 fmin_cg() 函数之外起作用,但在 fmin_cg() 函数内部不起作用吗?
我如何更改我的代码才能使其正常工作?
提前致谢。
最佳答案
问题在于将参数数组定义为
theta = np.ones((2, 1))
这体现在错误中:
ValueError: shapes (12,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
描述了 theta 数组和 X 数组的维度不匹配。这可以通过定义 theta 来解决,如下所示:
theta = np.ones(2)
这会创建与 theta((2, 1)) 完全相同的东西,只不过它被 reshape 了。现在需要对上面的代码进行的唯一区别是在乘法中对所有 theta 进行转置,以确保矩阵乘法是合法的。这是完整的工作代码:
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as optimize
from scipy.io import loadmat
data = loadmat('ex5data1.mat')
x = data['X']
X = data['X']
X = np.insert(X, 0, 1, axis=1)
y = data['y']
theta = np.ones(2)
def cost_function(theta, X, y, reg_param):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
m = float(y.shape[0])
h = X * theta.T
error = np.power((h - y), 2)
error = np.sum(error)
term = error / (2*m)
reg = (reg_param * np.sum(np.power(theta[1:, :], 2))) / (2*m)
return term + reg
print "Cost function: \n %s" % (cost_function(theta, X, y, 1))
def cost_function_gradient(theta, X, y, reg_param):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
m = float(y.shape[0])
grad = np.zeros((len(X[0]) + 1, 1))
reg = np.multiply(theta.T[1:, :], reg_param/m)
for j in xrange(len(X[0])):
term = np.multiply((X * theta.T) - y, X[:, j + 1])
term = np.sum(term) / m
grad[j + 1, 0] = term + reg
grad[0, 0] = np.sum(np.multiply((X*theta.T - y), X[:, 0])) / m
return grad
print "Cost function gradient: \n %s" % (cost_function_gradient(theta, X, y, 1))
reg_param = 0
opt = optimize.fmin_cg(cost_function, theta, args=(X, y, reg_param), maxiter=200)
关于python - 线性回归 : Cost function working independently, 但不在 scipy.optimize 函数内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47947049/
我对贝叶斯网络有一些误解。我的主要误解是独立和有条件的独立!! 如果例如我必须计算P(Burglary|Johncall) , 是吗P(Burglary|Johncalls)=P(Burglary)因
在以下代码中,set 方法更改 Calendar 类的字段值。字段YEAR 被声明为static int YEAR。那么为什么通过创建 Calendar 类的两个对象,一个对象的更改会反射(refle
假设我已经掌握了这两个事实:- CreateProcess() 启动一个进程并让您的程序在它运行时继续运行,但是当您的程序完成时,子进程会随之关闭。此外,您的程序必须注意子进程何时退出,以便它可以正确
是否可以定义一个正则表达式模式来检查例如。对于 3 个独立于它们在主字符串中位置的术语? 例如。我的字符串类似于 "click here to unsubscribe: http://www.url.
我有一系列计算一些统计数据的“命令”(实际上是调用 bash shell 函数)。一般来说,每个命令都与所有其他命令无关,有时有些命令可能会花费比预期更多的时间。 到目前为止,我有一个调用这些命令的
我一直在空闲时间尝试伪造 C,并且遇到了一些我觉得很有趣的行为。我希望有人能帮助回答我提出的一些问题。为了简单起见,让我们将讨论限制在使用 gcc 进行编译。首先是代码(.h文件都有include g
我遇到了以下代码,并被告知这意味着 COL_8888_RED 是“字节序独立的”。为什么?是什么让这个端独立?(我问过最初的编码员,但他们没有回复我……哎呀,也许他们也不知道。) union _col
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
我决定模拟一个教科书上的概率题: Three fair dice are rolled independently, what is the probability that one dice sho
我想尝试有关分布式文件同步/复制的想法。为了在用户工作时提高效率,我想实现某种守护程序来监视某些目录中的更改(例如/home/user/dirToBeMonitored 或 c:\docs 和 set
当我在Mac机器上的R(仅是默认的Mac R)中看到帮助页面时, > ?read.csv 它以漂亮的格式显示在新窗口中。 现在,我在Mac机器上使用Sublime文本3表示R(带有SublimeREP
我觉得这是 ui-router 的一个直接用例,但也许我错过了一些东西...... 我想要两个相邻的独立 View ,由它们自己的菜单控制。当我单击一个菜单上的 ui-sref 链接(或 $state
也许我在这里问了一个非常明显且愚蠢的问题,但我在 Google 上找不到任何信息,所以我开始: 为什么人们如此热衷于 Java 是平台无关的,而其他一些语言却不是。我的意思是,就我的理解而言,总的差异
FORTRAN 编程用户注释,第 1-2 章 ( Comparison of FORTRAN and C ),说: Fortran 90 supports useful features of C (
前段时间我对 BEM 方法产生了兴趣,并尝试在我的元素中使用它。我可能使用了它的一些修改版本,所以我的 css 看起来像这样: .block block .block__element 用于元素 .b
我想在数据库中创建一个没有特定大小的文本字段(在某些情况下它将存储长度未知的文本)——特定文本是序列化的简单对象(~ JSON) 最独立于数据库的方法是什么:- 没有指定大小的 varchar(不
WPF 文档和教程指出 WPF 与分辨率无关,据我所知,它会在不同分辨率(1600x1200 -> native 和 1024x768)和/或 DPI 设置下显示相同大小的窗口。但是,当我尝试示例应用
我是 Cygwin 的初学者。如果我有: cat output.txt | rm output.txt 我想在删除文件之前打印出结果,但是即使这些命令在单独输入到 Cygwin 时工作 find 也不
考虑以下 gilab-ci.yml 脚本: stages: - build_for_ui_automation - independent_job variables: LC_ALL: "
我在 Nhibernate 3.1 中有一个 JoinQueryOver 的 QueryOver Person类有一个Identity类的关联(一对一)Code 是 Person 类的字段,First
我是一名优秀的程序员,十分优秀!