机器学习入门(一)
绪论
2015年kaggle恶意代码分类比赛,提供超过500G的源码 早期反病毒软件均采用单一的特征匹配方法,利用特征串完成检测。 此次比赛冠军采用三个黄金特征:恶意代码图像,OpCode n-gram, Headers个数 并且使用xgboost和pypy加快训练速度 算法和数据是机器学习解决实际问题不可缺少的两大因素 训练使用了百度开源的深度学习架Paddle
机器学习工具箱
numpy库
安装:
apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
a.shape #表示数组的大小
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a
array([1, 2, 3])
>>> a.shape
(3,)
>>> b = np.array([[1,2,3],[4,5,6]])
>>> b
array([[1, 2, 3],
[4, 5, 6]])
>>> b.shape
(2, 3)
a.reshape(newshape) #newshape:整数值或整数元组。新的形状应该兼容于原始形状。如果是一个整数值,表示一个一维数组的长度;如果是元组,表示新数组的行和列数,一个元素值可以为-1,此时该元素值表示为指定,此时会从数组的长度和剩余的维度中推断出
>>> a.reshape((3,-1))
array([[1],
[2],
[3]])
>>> a.reshape((1,-1))
array([[1, 2, 3]])
广播机制:
numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。 如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。 当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制
>>> import numpy as np
>>> a = np.array([[ 0, 0, 0],
... [10,10,10],
... [20,20,20],
... [30,30,30]])
>>> b = np.array([1,2,3])
>>> print(a + b)
[[ 1 2 3]
[11 12 13]
[21 22 23]
[31 32 33]]
幂运算使用运算符**
100**0.5就是100的二分之一次方,结果为10
dot函数与inner函数
dot函数为矩阵乘积,左矩阵的行成右矩阵的列
>>> import numpy as np
>>> a = np.array([[1,2],[3,4]])
>>> b = np.array([[11,12],[13,14]])
>>> print(np.dot(a,b))
[[37 40]
[85 92]]
#计算式为
[[1*11+2*13, 1*12+2*14],[3*11+4*13, 3*12+4*14]]
inner函数为左矩阵的行乘右矩阵的行
>>> a
array([[1, 2],
[3, 4]])
>>> b
array([[11, 12],
[13, 14]])
>>> print np.inner(a,b)
[[35 41]
[81 95]]
#计算式为
1*11+2*12, 1*13+2*14
3*11+4*12, 3*13+4*14
matmul函数
函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播。 另一方面,如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,并在乘法之后被去除。 (直接视为矩阵乘积就好,一维数组视为一维矩阵进行运算)
举例:多维
>>> print a
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
>>> print b
[[0 1]
[2 3]]
>>> print np.matmul(a,b)
[[[ 2 3]
[ 6 11]]
[[10 19]
[14 27]]]
linalg.det函数
计算行列式
>>> import numpy as np
>>> a=np.array([[1,2],[3,4]])
>>> print np.linalg.det(a)
-2.0
linalg.solve函数和inv函数 solve函数用于求解线性方程组的解 inv函数用于求矩阵的逆
>>> import numpy as np
>>> a=np.array([[1,2],[3,4]])
>>> print np.linalg.det(a)
-2.0
>>>
>>>
>>>
>>> a=np.array([[1,1,1],[0,2,5],[2,5,-1]])
>>> a
array([[ 1, 1, 1],
[ 0, 2, 5],
[ 2, 5, -1]])
>>> b=np.array([6,-4,27])
>>> b
array([ 6, -4, 27])
>>> ainv=np.linalg.inv(a)
>>> a
array([[ 1, 1, 1],
[ 0, 2, 5],
[ 2, 5, -1]])
>>> print np.dot(ainv,b)
[ 5. 3. -2.]
>>> print np.linalg.solve(a,b)
[ 5. 3. -2.]
上一篇: Joblib 机器学习—保存模型|加载模型_CodingPark编程公园
下一篇: 数据理解常用函数