机器学习实战第一二章笔记

python 中一些函数的含义:

1 tile

例:

(1)

a = array([0, 1, 2])
b = tile(a, 2)
print(b)

//结果为
[0, 1, 2, 0, 1, 2]

(2)

a = array([0, 1, 2])
b = tile(a, (2, 1))
print(b)

//结果为
[[0, 1, 2],  
 [0, 1, 2]]

2 **

a**2 ==>求a的平方

a**3 ==>求a的立方

3 sum axis

sum应该是默认的axis=0 就是普通的矩阵或者数组对应相加

而当加入axis=1以后就是将一个矩阵的每一行向量相加

c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]])

print c.sum()
print c.sum(axis=0)
print c.sum(axis=1)

结果分别是:19, [3 8 8], [ 3 14  2]

         (2)keepdims

                  import numpy as np a = np.array([[1,2],[3,4]])

                  # 按行相加,并且保持其二维特性

                  print(np.sum(a, axis=1, keepdims=True))

                  # 按行相加,不保持其二维特性

                  print(np.sum(a, axis=1))

                  结果:

                  array([[3], [7]])

                  array([3, 7])

4 argsort

argsort函数返回的是数组值从小到大的索引值

>>> x = np.array([3, 1, 2])

>>> np.argsort(x)

array([1, 2, 0])

 

>>> x = np.array([[0, 3], [2, 2]])
>>> x
array([[0, 3],
[2, 2]])

>>> np.argsort(x, axis=0) #按列排序
array([[0, 1],
[1, 0]])

>>> np.argsort(x, axis=1) #按行排序
array([[0, 1],
[0, 1]])

 

>>> x = np.array([3, 1, 2])
>>> np.argsort(x) #按升序排列
array([1, 2, 0])
>>> np.argsort(-x) #按降序排列
array([0, 2, 1])

>>> x[np.argsort(x)] #通过索引值排序后的数组
array([1, 2, 3])
>>> x[np.argsort(-x)]
array([3, 2, 1])
 

二、

书中第一个程序的代码:

from numpy import *
import operator

def createDataSet():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1], [0.9,0.9]])
    labels = ['A', 'A', 'B', 'B', 'A']
    return group,labels

group,labels = createDataSet()


def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDisIndicies = distances.argsort()
    classCount = {}
    print(sortedDisIndicies)
    for i in range(k):
        voteIlabel = labels[sortedDisIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]


print(classify0([0,0],group,labels,3))

书中有一处 classCount.iteritems(),报错,将其换成 classCount.items() 

原因是:iteritems是为python2环境中dict的函数,我用的python3.6

 

三、

关于数据,链接:https://pan.baidu.com/s/1JcwnwBitChL01_sJnfb8CA 
提取码:sx8x

四、

在约会网站预测函数代码中 raw_input在python3中已经不存在

Python3将raw_input和input进行整合成了input....去除了raw_input()函数....

其接受任意输入, 将所有输入默认为字符串处理,并返回字符串类型

percentTats = float(input("percentage of time spent playing video games?"))

五、

KNN算法在数据量很大的时候,效率较低。为了改进,《统计学习方法》中对应的章节有kd树方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章