Numpy 无法使用形状(19,)(0,)--KNN广播操作数

Numpy 无法使用形状(19,)(0,)--KNN广播操作数,numpy,error-handling,ipython,classification,knn,Numpy,Error Handling,Ipython,Classification,Knn,我正在研究如何使用KNN预测一部电影的评级。我用一段视频和一本书来教自己如何去做 我试图运行我在书中找到的代码,但它给了我错误消息。我在谷歌上搜索了错误信息,以便理解它并解决我的问题,但我认为我不知道如何根据我的问题调整解决方案 将numpy导入为np 作为pd进口熊猫 r_cols=['user_id','movie_id','rating'] ratings=pd.read_csv('C:/Users/dell/Downloads/DataScience/DataScience-Python

我正在研究如何使用KNN预测一部电影的评级。我用一段视频和一本书来教自己如何去做

我试图运行我在书中找到的代码,但它给了我错误消息。我在谷歌上搜索了错误信息,以便理解它并解决我的问题,但我认为我不知道如何根据我的问题调整解决方案

将numpy导入为np
作为pd进口熊猫
r_cols=['user_id','movie_id','rating']
ratings=pd.read_csv('C:/Users/dell/Downloads/DataScience/DataScience-Python3/ml-100k/u.data',sep='\t',engine='python',names=r_cols,usecols=range(3))#请在此处输入文件路径。该文件是u.data
打印(ratings.head())
movieProperties=ratings.groupby('movie_id').agg({'rating':[np.size,np.mean]})
打印(movieProperties.head())
movieNumRatings=pd.DataFrame(movieProperties['rating']['size'])
movieNormalizedNumRatings=movieNumRatings.apply(λx:(x-np.min(x))/(np.max(x)-np.min(x)))
打印(movieNormalizedNumRatings.head())
movieDict={}
将open('C:/Users/dell/Downloads/DataScience/DataScience-Python3/ml-100k/u.item')作为f:#文件为u.item
温度=“”
对于f中的行:
fields=line.rstrip('\n').split('|')
movieID=int(字段[0])
名称=字段[1]
类型=字段[5:25]
流派=地图(整数,流派)
movieDict[movieID]=(名称、类型、movieNormalizedNumRatings.loc[movieID].get('size')、movieProperties.loc[movieID].rating.get('mean'))
印刷品(影碟[1])
从scipy导入空间
def计算距离(a,b):
genresA=np.array(列表(a[1]))
genresB=np.array(列表(b[1]))
genreDistance=空间距离余弦(genresA,genresB)
popularityA=np.array(a[2])
popularityB=np.array(b[2])
popularityDistance=abs(popularityA-popularityB)
返回genreDistance+popularityDistance
打印(计算距离(movieDict[2],movieDict[4]))
进口经营者
def GetNeights(电影ID,K):
距离=[]
对于movieDict中的电影:
如果(电影!=电影ID):
dist=计算距离(movieDict[movieID],movieDict[movie])
距离。附加((电影,距离))
距离.排序(key=operator.itemgetter(1))
邻居=[]
对于范围(K)内的x:
append(距离[x][0])
回乡
K=10
平均光栅=0
邻居=获取邻居(1,K)
我从PowerShell收到此错误消息:

c:\programdata\anaconda3\lib\site-packages\scipy\spatial\distance.py(695)correlation()

     693        u = u - umu

     694        v = v - vmu

---> 695        uv = np.average(u*v, weights=w)

     696        uu = np.average(np.square(u), weights=w)

     697        vv = np.average(np.square(v), weights=w)


**Note**: The code ran fine and produced results up until *print(Cprint(ComputeDistance(movieDict[2], movieDict[4]))*

My guess is the problem is with this part of the code: 


import operator
def getNeighbors(movieID, K):
    distances = []
    for movie in movieDict:
        if (movie != movieID):
            dist = ComputeDistance(movieDict[movieID], movieDict[movie])
            distances.append((movie, dist))
    distances.sort(key=operator.itemgetter(1))
    neighbors = []
    for x in range(K):
        neighbors.append(distance[x][0])
    return neighbors

K = 10
avgRating = 0
neighbors = getNeighbors(1, K) 


The code can be found in this link: https://hendra-herviawan.github.io/Movie-Recommendation-based-on-KNN-K-Nearest-Neighbors.html
回溯(最近一次呼叫最后一次):

我试图从ipython终端调试问题时收到此错误消息:

c:\programdata\anaconda3\lib\site-packages\scipy\spatial\distance.py(695)correlation()

     693        u = u - umu

     694        v = v - vmu

---> 695        uv = np.average(u*v, weights=w)

     696        uu = np.average(np.square(u), weights=w)

     697        vv = np.average(np.square(v), weights=w)


**Note**: The code ran fine and produced results up until *print(Cprint(ComputeDistance(movieDict[2], movieDict[4]))*

My guess is the problem is with this part of the code: 


import operator
def getNeighbors(movieID, K):
    distances = []
    for movie in movieDict:
        if (movie != movieID):
            dist = ComputeDistance(movieDict[movieID], movieDict[movie])
            distances.append((movie, dist))
    distances.sort(key=operator.itemgetter(1))
    neighbors = []
    for x in range(K):
        neighbors.append(distance[x][0])
    return neighbors

K = 10
avgRating = 0
neighbors = getNeighbors(1, K) 


The code can be found in this link: https://hendra-herviawan.github.io/Movie-Recommendation-based-on-KNN-K-Nearest-Neighbors.html
“操作数不能与形状(x,)(y,)一起广播”的错误通常在尝试在两个必须具有相同形状但不具有相同形状的数组之间执行操作时出现。在您的例子中,您尝试在两个数组u和v之间取一个加权平均值。数组u和v没有长度

我看到您通过使用“|”字符拆分行,然后将这些结果存储在字典中,来解析电影列表。可能此文件或其带“|”的分区返回了不同的结果


错误日志显示第二个数组没有任何元素,这可能是由movies文件上的空行生成的。

您理解错误吗?这是在找到解决方案之前。通过回溯进行回溯可能需要一些工作,但是可以很好地猜测,
cosine
参数,
genresA
genresB
中存在大小问题。你检查过了吗?它们的
类型
和if数组、
形状
数据类型
是一个起点。请清理您的代码。Body想要处理这么多来调试您的程序。你也不必要地复制了所有的换行符。@Anony Mouse我刚刚添加了可以找到代码的链接。此外,出于教育目的,如果您能向我推荐学习如何清理垃圾的材料,我将不胜感激code@hpaulj我也这么想,但在导入操作符模块之前,代码运行良好。我已经编辑了这个问题,并添加了一个链接,您可以在其中在线找到代码。此外,当我试图使用genresA.size等确定genresA的形状或大小时,我收到一条错误消息,说genresA未定义。请参阅帮助网站:我认为错误与代码的后部分有关,因为代码运行良好,直到我调用操作员模块。我已经编辑了这个问题,你为什么不删除操作符模块,并尝试在没有操作的情况下使用相同的模块(这很容易做到)?或者从“导入操作符”开始删除任何内容,我假设错误仍然存在(因此它不能是由于导入操作符造成的)。。。如果你想清理你的代码并制作一个MWE,那么你自己可能已经发现了这个问题。。。