zoukankan      html  css  js  c++  java
  • 机器学习实战错误校正

    机器学习实战书中代码用python2实现,当使用python3时会出现一些错误,这些错误由语法不同或者代码不够完善引起,学习过程中修改如下,方便大家学习。

    1、page40,majorityCnt中的iteritems()

    (1)在Python2.x中,iteritems() 用于返回本身字典列表操作后的迭代器【Returns an iterator on all items(key/value pairs) 】,不占用额外的内存。
    (2)在Python 3.x 里面,iteritems()方法已经废除了。在3.x里用 items()替换iteritems() ,可以用于 for 来循环遍历。
    [https://blog.csdn.net/program_developer/article/details/78657908]

    [https://blog.csdn.net/liukai2918/article/details/78307271]

    2、page41,创建树的函数代码

    def createTree(dataset,featureList): 
    

     参数featureList传进来后应该首先进行深拷贝出另一个list用来操作,按照书中的代码,featureList会被删除第一个特征,因为传递的是引用型,所以函数外部的featureList也会改变而且难以察觉,此处改为:

    def createTree(dataset,featureList):    #数据集,特征列表,产生决策树,返回值是字典
        featureListCopy=featureList[:]
    

     函数内的featureList均改为featureListCopy。

    3、page65,切分文本

    regEx=re.compile('\W*')
    

     w表示数字字母下划线

    W表示非数字非字母非下划线,即对w取反

    *表示匹配0次、1次或者多次

    运行后抛出警告:

    FutureWarning: split() requires a non-empty pattern match.

    原因:用W*匹配文本时表示非数字字母下划线任意次,也就是说0次也符合匹配要求,0次就是nothing

    Your regular expression ('\W*') is invalid - it means zero or more not word characters. Zero or more can be matched by "nothing", and if empty string is a match, where exactly do you expect splits will occur?

    [https://stackoverflow.com/questions/37642284/futurewarning-split-requires-a-non-empty-pattern-match]

    解决办法:把*改成+即可。

    4、page66,range()

    python3中的range()返回的是range类型,不是list类型,此处需要修改:

    将:

    trainingSet=rang(50)

    改为:
    trainingSet=list(range(50))

    5、用于分类的邮件中ham文件夹下第23.txt文件的第二段中有个“?”会带来编码问题,删除即可。

  • 相关阅读:
    java页面请求跑批处理sql的有关问题
    Linux下一个检查跑批是否成功的Shell
    redhat Linux5 安装vsftp .
    LINUX FTP简单配置
    java代理机制
    详细解析Java中抽象类和接口的区别
    抽象类和接口的区别
    SVN与Git比较
    浅谈存储过程和触发器
    存储过程,触发器,函数 学习总结
  • 原文地址:https://www.cnblogs.com/zhhy236400/p/9860894.html
Copyright © 2011-2022 走看看