目录
机器学习初步入门,感觉和以前的数学建模那一套很像,回归,分类,聚类,效果的可视化。只是从MATLAB换成了Python。记录一下在书中用到的api,一是不想每次都去官网查, 二是希望能对pandas和numpy这些数据科学的包的api用法更熟悉一些,不只是机器学习,其他很多时候也会带来巨大的方便,例如从es拉取数据并导出,直接用pandas的DataFrame.to_csv就可以了。
前置条件
书中用到的包主要是numpy,pandas,matplotlib.pyplot这三种,在后文采用如下的简写:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
三者的官网api链接如下,需要查看非常详细的关键字说明请自行查阅:
numpy官方api
pandas官方api
pyplot官方api
Python内置函数
Python3 API
zip()
:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。可迭代对象是为了优化内存使用。如果只有一个参数,不要使用zip,直接元组即可。例如用for i in (‘a’, ‘b’, ‘c’),而不是使用for i in zip([‘a’, ‘b’, ‘c’]),后者返回的是[(‘a’,), (‘b’,),(‘c’,)]。
repr()
:repr() 函数将对象转化为供解释器读取的形式。返回对象的string类型,repr()的输入对于Python解释器更为友好,可实现obj == eval(repr(obj))
enumerate()
: enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。Python 2.3. 以上版本可用,2.6 添加 start 参数。
>>>seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’]
>>> list(enumerate(seasons)) [(0, ‘Spring’), (1, ‘Summer’), (2, ‘Fall’), (3, ‘Winter’)]
>>> list(enumerate(seasons, start=1)) # 下标从 1 开始
[(1, ‘Spring’), (2, ‘Summer’), (3, ‘Fall’), (4, ‘Winter’)]
书中有这样的用法: a, _ = [1, 2] 此时a为1。
numpy API
np.bincount()
:计算非负的int数组中每个值的出现次数。容器的数量(大小为1)比x中的最大值大1。这个api需要看下官网,一两句说不清楚。
这里说的是每个bin,都给出了它的索引值在x(入参数组)中的出现次数。
这里的bin可以认为是箱子,在机器学习中也有binning(分箱)的模型。但从个人角度来看,bin可以认为是组,在plt.hist()里面用到的入参bins可以认为是
组界
,这个后面说到再提。
>>> np.bincount(np.arange(5))
array([1, 1, 1, 1, 1])
>>> np.bincount(np.array([0, 1, 1, 3, 2, 1, 7]))
array([1, 3, 1, 1, 0, 0, 0, 1])
因为容器的数量(大小为1)比x中的最大值大1。所以对于第一个例子的入参[0,1,2,3,4],这里有五个连续的数,bin的数量等于max(x)+1=5,即认为有五个bin,bin1的索引是0,bin2的索引是1,bin3的索引是2..以此类推。那么bin1的索引0在x中出现了一次,bin2的索引1在x中出现了一次…所以最后的out[]是[1,1,1,1,1]。或者不需要说的那么复杂,我的out就是想算出来,从0到max(x)的出现次数,对于第二个例子,0出现了一次,1出现了3次,2出现了一次,3出现了1,4 5 6均出现0次,7出现一次。所以,我的out就是[1, 3, 1, 1, 0, 0, 0, 1]。
np.astype(“int”)
:转换数组的数据类型为int类型。
np.shape
:返回np.array的维度大小。
np.reshape(-1, 1)
:将矩阵的列变为一列,行自动计算,这里的-1表示自适应。
np.argmin()
:返回沿轴的最小值的索引。
np中axis=0表示列,axis=1表示行。
np.argsort()
:返回能对数组进行排序的索引数组。
np.eye(n)
:生成大小为n的对角阵。
np.means()
:取均值。axis=0对列取均值,axis=1表示对行取均值。
np.unique(x)
:等于Python的sorted(set(x)),与Python不同的是 它改变了x的值。
np.ravel()
:返回一个连续的扁平数组。返回包含输入元素的一维数组。 只在需要时才制作源数组副本。
np.linspace()
:在指定的间隔内返回均匀间隔的数字。
>>> np.linspace(2.0, 3.0, num=5)
array([ 2. , 2.25, 2.5 , 2.75, 3. ])
>>> np.linspace(2.0, 3.0, num=5, endpoint=False)
array([ 2. , 2.2, 2.4, 2.6, 2.8])
np.logspace()
:返回在对数刻度上均匀间隔的数字。
>>> np.logspace(2.0, 3.0, num=4)
array([ 100. , 215.443469 , 464.15888336, 1000. ])
>>> np.logspace(2.0, 3.0, num=4, endpoint=False)
array([ 100. , 177.827941 , 316.22776602, 562.34132519])
np.random.RandomState(0)
:生成伪随机数,随机种子为0。
np.random.RandomState.normal()
:从正态分布中随机抽取样本。
np.random.RandomState.poisson()
:从泊松分布中随机抽取样本。
np.hstack()
:按顺序堆叠数组(列式)。可以这么理解,这里的hstack是horizontally stack的缩写,语义上就是水平堆叠,也就是水平扩展数组,想要水平扩展,当然是按列增加。反之,vstack,vertical stack,垂直堆叠,即是增加行数。
>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> np.hstack((a,b))
array([1, 2, 3, 2, 3, 4])
>>> a = np.array([[1],[2],[3]])
>>> b = np.array([[2],[3],[4]])
>>> np.hstack((a,b))
array([[1, 2],
[2, 3],
[3, 4]])
Pandas API
pd.df.value_counts()
:词频统计
pd.df.to_csv()/read_csv()
:读写csv,
-
是否保留列名
header: Whether to write out the column names (default True) -
是否保留行索引
index: whether to write row (index) names (default True)
pandas.plotting.
scatter_matrix
(
frame
,
alpha=0.5
,
figsize=None
,
ax=None
,
grid=False
,
diagonal=’hist’
,
marker=’.’
,
density_kwds=None
,
hist_kwds=None
,
range_padding=0.05
,
**kwds
)
绘制散点图矩阵。
frame:DataFrame
alpha:float,可选应用的透明度
figsize 🙁 float,float),可选 以英寸为单位的元组(宽度,高度)
ax:Matplotlib轴对象,可选
grid:bool,可选,将此设置为True将显示网格
diagonal:{‘hist’,’kde’} 在’kde’和’hist’之间选择对角线中的核密度估计或直方图
marker:str,可选
Matplotlib标记类型,默认为’。’
hist_kwds:其他绘图关键字参数 要传递给hist函数
density_kwds:其他绘图关键字参数要传递给核密度估计图
range_padding:float,可选 x和y中轴范围相对于(x_max – x_min)或(y_max – y_min)的相对延伸,默认值为0.05
kwds:其他绘图关键字参数 要传递给scatter()函数
plt API
plt.hist(x, bins)
:计算并绘制x的直方图。对于bins,官方介绍如下:
可以很清楚的看到
bins is a sequence,gives bin edge
。bins给定了bin的边界,这里的bin就是直方图的一个个小的直条。n个直条会有n+1的边界,bins就是这n+1个数组成的序列。
plt.vlines(bins, -3, 3, linewidth=1, alpha=.2, c=’k’)
:绘制垂直线。绘制每个x处的从ymin到ymax的垂直线。这里的bins就是之前的组界,alpha为透明度。c代表颜色,k代表黑色。
plt.colorbar(x,ax=axes.tolist())
:绘制色彩条。提供ax这一参数较为重要,提供这一参数会调整原本的轴列表的大小,为色彩条提供对应的空间,显示图显得更加整齐美观。如下:
不提供ax参数:
提供ax参数的对比:
plt.legend()
:展示图例,这个只有一个loc参数需要注意一下:如果是数值表示,对应的含义列表如下。我一般会用loc=”best”。
plt.xticks()
:在x轴画刻度线,并给出注释,rotation表示旋转角度。
plt.hlines()
:画水平线。
plt.barh()
:画水平柱状图。