python - 形状未对齐:Scipy 的 fmin_tnc 函数
问题描述
我正在尝试自己解决第二个练习的第一部分(逻辑回归):https ://github.com/jdwittenauer/ipython-notebooks 。
result
计算变量时我被卡住了。这是错误消息的最后一部分:
File "<ipython-input-51-39288db7a045>", line 55, in ComputeCost
h=sigmoid(np.dot(X,theta))
File "<__array_function__ internals>", line 6, in dot
ValueError: shapes (3,) and (100,1) not aligned: 3 (dim 0) != 100 (dim 0)
这是我的一段代码(对不起,我的编程技能很差,我是初学者):
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import scipy.optimize as opt
data=pd.read_csv('ex2data1.txt', names=['exam1','exam2','admitted'])
def sigmoid(z):
g=1/(1+np.exp(-z))
return g
def whichisy(data, col):
if not isinstance(data, pd.DataFrame):
raise ValueError('Data is not a pandas DataFrame')
y=data.iloc[:,col]
X=data.drop(columns=data.columns[col])
X.insert(0,'Ones', 1)
X=np.array(X)
y=np.array(y)
y=np.reshape(y, (len(y),1))
return X,y
X,y=whichisy(data,2)
def ComputeCost(X, y, theta):
h=sigmoid(np.dot(X,theta))
cost=1/len(y)*np.sum(-y*np.log(h)-(1-y)*np.log(1-h))
return cost
def Gradient(X, y, theta):
g=np.zeros(len(theta))
prodotto=sigmoid(np.dot(X,theta))-y
for k in range(len(theta)):
g[k]=1/len(y)*np.sum(prodotto*np.reshape(X[:,k],(len(X),1)))
return g
theta=np.zeros([np.shape(X)[1],1])
result=opt.fmin_tnc(ComputeCost, theta, fprime=Gradient, args=(X,y))
我看到并理解了本练习的解决方案中的代码,但我想使用我的版本来解决它,但我不明白我错在哪里。
我没有成功地尝试展平我的梯度函数的返回值(如此处建议的矩阵未对齐错误:Python SciPy fmin_bfgs)和“y”数组(如何在 scipy.optimize 中使用 fmin_cg 正确获取维度)。
谢谢!
编辑1:在定义和函数theta
时作为第一个参数放置后,函数运行但最小化失败。ComputeCost
Gradient
fmin_tnc
result=opt.fmin_tnc(ComputeCost, theta, Gradient, args=(X,y))
并返回:(array([4.60628149e-05, 5.53178320e-03, 5.18798215e-03]), 45, 4)
. 所以 rc (返回代码)不是应该的 1 。
我还尝试运行result=opt.minimize(ComputeCost, theta, method='TNC', jac=Gradient, args=(X,y))
以检查问题是否出在fmin_tnc
函数中,但返回的值是相同的。
解决方案
尝试将“theta”移动到“X”和“y”def
之前ComputeCost
,Gradient
例如
def ComputeCost(theta, X, y):
# adjust the parameters in your code accordingly
...
推荐阅读
- javascript - 如何使用 XMLHttpRequest 从 json 中创建一个变量?
- haskell - 如何调整“尾巴”以避免在 Haskell 中出现不正确的缩进
- c++ - 如何使用完全限定名继承基类的构造函数?
- java - 当比较基于我自己的方法的结果时,我可以使用 Comparator.comparing() 定义一个新的比较器吗?
- testing - 我在 GitLab CI 中的测试阶段不会被管道拾取
- r - 为什么 case_when 序列中的最后一个案例通常称为 TRUE?
- apache-kafka - 如何在代码中计算 Kafka *会发送(并且之前确实发送过)*发送消息的分区?
- r - 在 Rmd 中获取文件时遇到问题
- java - 当记录存在时,结果集返回空。语句在控制台中执行时有效,而不是在代码中。为什么?
- sql - 有没有办法在没有唯一性的情况下防止插入特定情况?