opt.fmin_tnc报错
代码部分如下import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#导入数据
data=pd.read_csv('C:\\Users\\hasee\\Desktop\\machine learning\\machine-learning-ex2\\ex2\\ex2data1.txt',
names=['Exam1','Exam2','Admitted'])
#X与y的矩阵化,初始化thetas
data.insert(0,'ones',1)
X=np.array(data.iloc[:,:3])
y=np.array(data.Admitted).reshape(100,1)
thetas=np.zeros((3,1))
#定义函数
def sigmoid(x):
return1/(1+np.exp(-x))
def costfunction(X,y,thetas):
a=np.log(sigmoid(np.dot(X,thetas)))
first=np.multiply(y,a)
second=np.multiply((1-y),np.log(1-sigmoid(X.dot(thetas))))
return np.sum(first+second)/(-100)
def gradient(X,y,thetas):
length = len(y)
s=np.empty((1,3))
for i in range(length):
s+=(sigmoid(X.dot(thetas)) - y) * X
s=s.reshape(3,)
return s/100
处理后的data长这样
ones Exam1 Exam2Admitted
0 134.62366078.024693 0
1 130.28671143.894998 0
2 135.84740972.902198 0
3 160.18259986.308552 1
4 179.03273675.344376 1
.. ... ... ... ...
95 183.48916348.380286 1
96 142.26170187.103851 1
97 199.31500968.775409 1
98 155.34001864.931938 1
99 174.77589389.529813 1
在用scipy.optimize.fmin_tnc最小化costfunction这个函数的时候
输入代码为result = opt.fmin_tnc(func=costfunction, x0=thetas, fprime=gradient, args=(X, y))
报错说costfunction里有问题:
File "D:/Python/machine learning/ml 2.py", line 33, in costfunction
a=np.log(sigmoid(np.dot(X,thetas)))
File "<__array_function__ internals>", line 5, in dot
ValueError: shapes (3,) and (100,1) not aligned: 3 (dim 0) != 100 (dim 0)
可是X.shape为(100,3)thetas.shape为(3,1)
单独执行np.log(sigmoid(np.dot(X,thetas)))也是可以正常执行的
本帖最后由 L、Gj 于 2020-7-14 16:31 编辑
在costfunction和gradient两个函数里一开始加了 thetas=thetas.reshape(3,1)然后把gradient里的s改成s=np.zeros((1,3)) 就成功了
页:
[1]