欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器学习入门(一)

程序员文章站 2022-07-13 09:00:48
...

绪论

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.]