协同过滤算法的一些报错及python函数学习

1.cannot import name ‘jaccard_similarity_score‘

这个是因为新的scikit-learn不再自动修改语法。通过路径找到存放jaccard的py文件,发现其中的jaccard函数名称为jaccard_score
将jaccard_similarity_score 改为 jaccard_score即可
参考:https://blog.csdn.net/m0_59324917/article/details/124731395

2. ‘DataFrame’ object has no attribute ‘dtype’
user_similar = 1 - pairwise_distances(df, metric="jaccard")

报错: ‘DataFrame’ object has no attribute ‘dtype’
原因:df是DataFrame类型,这种类型没有dtype属性。dtype是numpy里的,可以将df改为numpy里的ndarray类型,即将df 改为df.values即可

user_similar = 1 - pairwise_distances(df.values, metric="jaccard")

这里运行后可能会有一个警告:

DataConversionWarning: Data was converted to boolean for metric jaccard
  warnings.warn(msg, DataConversionWarning)

这里参考:https://blog.csdn.net/zimiao552147572/article/details/106523212

警告:DataConversionWarning: Data was converted to boolean for metric jaccard。warnings.warn(msg, DataConversionWarning)
解释:DataConversionWarning:数据已转换为度量jaccard的布尔值警告.warn(消息,数据转换警告)
解决:设置dtype=bool,比如 df = pd.DataFrame(datasets, columns=items, index=users, dtype=bool)

这里就会将数值变成布尔类型,当然,结果需要数值的话就不加,这个警告不影响后面程序的运行。

3.sort_values()

sort_values介绍

sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)

①axis 如果axis=0,那么by=“列名”; 如果axis=1,那么by=“行名”;
②ascending: True则升序,可以是[True,False],即第一字段升序,第二个降序
③inplace: 是否用排序后的数据框替换现有的数据框 ,True,或者False
④kind: 排序方法
⑤na_position : {‘first’, ‘last’}, default ‘last’,默认缺失值排在最后面

4.sort_index()

df. sort_index() 查看按照轴排序的数据。可以完成和 df. sort_values() 完全相同的功能,但python更推荐用只用df. sort_index()对“根据行标签”和“根据列标签”排序,其他排序方式推荐用df.sort_values()。
更详细:sort_index()介绍

5.df.ix[];DataFrame‘ object has no attribute ‘ix‘错误

修改df指定位置的值
修改df指定位置的值,例如,将第a列值为6时,c列的值加上20,即:
在这里插入图片描述
参考:pandas dataframe df.at、 df.ix、df.loc等用法
当不修饰时,和df.loc的作用类似,可以用来选择列。

DataFrame‘ object has no attribute ‘ix‘报错,这是因为pandas版本0.20.0及其以后版本中,ix已经不被推荐使用。
解决办法:使用loc和iloc替换,可参考博文:AttributeError: ‘DataFrame‘ object has no attribute ‘ix‘解决办法
试了一下,直接把ix换成loc就可以了。

6.union()用法

1.本题考查的知识点是:union()方法。union() 方法的工作原理是:返回多个集合(集合的数量大于等于2)的并集,即结果集合包含了所有被合并集合中的所有元素。因为集合中的元素不可重复,所以各个集合中重复的元素在结果集合中只会出现一次。

2.union()方法的语法是:set0.union(set1[,set2,…,setN]),set0和set1是必需出现的,setN都是要被合并的集合;[]表示可选参数(非必须参数),即set2,…,setN可以有,也可以没有,他们也是要被合并的集合,使用逗号隔开。

3.union()方法的返回结果是一个新集合:通常写作:result=x.union(y,z),表示将x,y,z三个集合求并集,返回一个新集合赋值给result。本题中:“a”和“d”为三个集合中的重复元素,所以结果集合result为:{“a”, “b”, “c”,“d”},其中集合中的元素是无序的,可以理解为集合中的元素的排序是随机的。
参考:Python中集合的union()方法

7.items()

d.items()或者list(d.items())返回的是以元组类型表示的键值对,
且键值之间用的是逗号而不是分号,
且键值之间用的是逗号而不是分号,
且键值之间用的是逗号而不是分号,
这就是为什么要把ls再用for循环重写一遍的原因。
参考博文:Python字典操作方法–items()

8.set()用法

set顾名思义是集合,里面不能包含重复的元素,接收一个list作为参数
set还可以像数学上那样求交集和并集

list1=['a','b','zhang','kang']
list2=['a','b','c','d']
s1=set(list1)
s2=set(list2)
#交集,使用&操作符
s3=s1&s2
#并集,使用|操作符
s4=s1|s2
print(s3)
print(s4)

输出:
set(['a', 'b'])
set(['a', 'c', 'b', 'd', 'zhang', 'kang'])

参考:python中set()函数的用法

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值