美文网首页
机器学习实战填坑记—k近邻算法

机器学习实战填坑记—k近邻算法

作者: 瘦长的丰一禾 | 来源:发表于2017-01-20 17:17 被阅读1037次

    由于书上的代码用的是Py2.6的,所以当我用Py3.5的时候出现了一些问题。

    第2章 k-近邻算法
    问题1:
    在我加载函数classify0的时候按照书上的代码出现错误,Python3: AttributeError: 'dict' object has no attribute 'iteritems' 。经研究发现是书上的Py2.7的代码跟我用的Py3.5是有差异的,因此将函数中的classCount.iteritems()改为classCount.items()就好了。

    问题2:
    当我用>> reload(kNN)时候出现错误:

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'reload' is not defined

    经查询:In Python 2.x, this was a builtin, but in 3.x, it's in the imp module.
    所以需要在前面加入命令from imp import reload

    问题3:
    研究示例“使用k-近邻算法改进约会网站的配对效果”的时候加载命令datingDataMat,datingLabels = kNN.file2matrix('datingTestSet.txt')出现错误:ValueError: invalid literal for int() with base 10: 'largeDoses'。
    查看文件原来第四列为字符,下载的文件包含的有datingTestSet2.txt就是datingTestSet.txt对第4列转换后得到的,现在也可以按如下方法对原来的文件datingTestSet.txt进行变换得到datingTestSet2.txt

    In [61]:table= pd.read_table('datingTestSet.txt', header = None)
    In [62]:table.head(3)
    Out[62]: 
           0         1         2           3
    0  40920  8.326976  0.953952  largeDoses
    1  14488  7.153469  1.673904  smallDoses
    2  26052  1.441871  0.805124   didntLike
    In [63]:table.columns = ('feixing','youxi','xiaofei','xiyin')
    In [64]:table.head(3)
    Out[64]: 
       feixing     youxi   xiaofei       xiyin
    0    40920  8.326976  0.953952  largeDoses
    1    14488  7.153469  1.673904  smallDoses
    2    26052  1.441871  0.805124   didntLike
    In [65]:table.count()
    Out[65]: 
    feixing    1000
    youxi      1000
    xiaofei    1000
    xiyin      1000
    dtype: int64
    
    #将第四列按喜欢程度由弱到强转换为数字1,2,3
    In [66]:def xiyin2shuzi(x):
        if x == 'largeDoses':
            return 3
        if x == 'smallDoses':
            return 2
        if x == 'didntLike':
            return 1
    In [67]: table['xiyin'] = table['xiyin'].apply(xiyin2shuzi)
    In [68]:table.head()
    Out[68]: 
       feixing      youxi   xiaofei  xiyin
    0    40920   8.326976  0.953952      3
    1    14488   7.153469  1.673904      2
    2    26052   1.441871  0.805124      1
    3    75136  13.147394  0.428964      1
    4    38344   1.669788  0.134296      1
    In [69]:table.to_csv('datingTestSet2.txt', header = False, index = False,sep = '\t')
    # header: Whether to write out the column names (default True)
    # index: whether to write row (index) names (default True)
    # '\t'是tab,表示空格。为了跟变更前的数据保持一致。
    

    参考文章:机器学习1k近邻 (注意这里面的代码尽管Print里面加了双括号也是Py2.x的代码)
    Python3.X新特性

    相关文章

      网友评论

          本文标题:机器学习实战填坑记—k近邻算法

          本文链接:https://www.haomeiwen.com/subject/qyhwbttx.html