记录机器学习练习中不懂的函数

该文章目的:
记录自己在做机器学习练习题中遇到的陌生函数的用法,也包括经常会忘记的函数,后续会一直在这篇文章中增加!ヾ(◍°∇°◍)ノ゙
该文章涉及的函数包有python、numpy、pandas、matplotlib、seaborn、scipy、sklearn



  • pandas中apply()函数的用法
DataFrame.apply(func,axis=0,broadcast=False,raw=False.reduce=None,args=(),**kwds)

该函数最有用的参数是第一个,func是一个函数名称,一般需要自己实现,然后在执行这个apply函数时会自动调用func函数,axis表示横轴还是纵轴,比如当axis=1时就会将该DataFrame的每一行当做一个Series类型传入func函数进行处理,处理完每一行后,将每一行的返回结果组成一个Series,作为apply的返回值。如果不指定axis的值,默认是0



  • python中lambda的用法:
lambda x:x**2

该函数是python中的匿名函数,只能处理简单的功能,用法很简单, l a m b d a lambda 后接形参的名称,然后冒号,冒号后是一个表达式,表示对形参的处理,处理结果即是返回值,例如:

g = lambda x:x**2
print(g(3))		# 结果是3**2=9


  • sklearn中metrics.classification_report用法
from sklearn.metrics import classification_report
print(classification_report(data['y'],y_predict))

用于在做分类问题时生成结果的评价报告,在训练集上训练完数据之后,得出最佳的theta值,然后在测试集上对该算法进行泛化性评估,classification_report第一个参数传入数据的原标签(即正确的标签),第二个参数传入预测出来的标签,进行比对后会生成一张报告表如图所示

	 		precision    recall  f1-score   support
	 
       1       0.97      0.98      0.98       500
       2       0.98      0.97      0.98       500
       3       0.98      0.96      0.97       500
       4       0.97      0.97      0.97       500
       5       0.97      0.98      0.98       500
       6       0.98      0.99      0.98       500
       7       0.98      0.97      0.97       500
       8       0.98      0.98      0.98       500
       9       0.97      0.96      0.96       500
      10       0.98      0.99      0.99       500
accuracy                           0.98      5000
macro avg      0.98      0.98      0.98      5000
weighted avg   0.98      0.98      0.98      5000

其中,precision表示预测的查准率,recall表示预测的查全率。

f1-score表示权衡了P和R得出的结果,因为P和R的值一般是相悖的,即P大则R小,P小则R大.
f 1 s c o r e = 2 P R / ( P + R ) f1score = 2*P*R/(P+R)
support表示每类样本的总数量,最后三行的support列是全部样本数量



  • sklearn中svm.SVC的使用
svc = svm.SVC(kernel='rbf',C=best_params['C'],gamma=1000,probability=True)

svm.SVC()是创建了一个用于分类的支持向量机
kernel参数用于指定内核函数的类型,这里的rbf是高斯内核函数
C参数是代价函数的系数,是权衡最大间隔和分类误差的参数,一般来说如果样本数据有许多噪点,需要将C值调小一些。
gamma参数是核函数的参数,比如使用高斯内核函数,需要配备 λ λ 参数,当 λ λ 较大时,高斯内核函数的图像较为平缓,较小时图像较为陡峭
max_iter 最大迭代次数,类似于梯度下降的迭代次数
probability 是否启用概率估计,默认为 F a l s e False
degree是当使用poly内核时,多项式的维度,默认是3
如何选择核函数:
如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。



  • sklearn中svc.fit函数
svc.fit(data[['X1','X2']],data['y'])

第一个参数是样本数据,第二个参数是样本标签
函数功能是根据给定的训练数据拟合SVM模型。



  • sklearn中svc.get_params方法
svc.get_params([deep])
# 获取此估算器的参数并以字典行书储存,默认deep=True,以分类iris数据集为例,得到的参数如下
{'C': 1.0, 'cache_size': 200, 'class_weight': None, 'coef0': 0.0,
'decision_function_shape': 'ovr', 'degree': 3, 'gamma': 'auto', 'kernel': 'rbf', 
'max_iter': -1, 'probability': False, 'random_state': None, 'shrinking': True, 
'tol': 0.001, 'verbose': False}

用于获取svc模型中的各个参数



  • sklearn中svc.decision_function
svc.decision_function(X)

用于计算传入的样本X到分离超平面的距离,一般在可视化边界时会用到,用于将边界点选择出来



  • sklearn包svc.score()
svc.score(X, y[, sample_weight])
0.9411764705882353

返回给定测试数据和标签的平均精确度



  • sklearn包中svc.predict(X)
svc.predict(X)

根据测试数据集进行预测,输出预测的y标签



  • Numpy中meshgrid函数:
xplot = np.linspace(0,25,6)
yplot = np.linspace(0,25,6)
Xplot,Yplot = np.meshgrid(xplot,yplot)

meshgrid是生成网格的意思,它的返回值是含有两个元素的ndarray类型,第一个元素是网格的横坐标矩阵,第二个元素是网格的纵坐标矩阵,如上代码会返回以下值:

[array([[ 0.,  5., 10., 15., 20., 25.],
        [ 0.,  5., 10., 15., 20., 25.],
        [ 0.,  5., 10., 15., 20., 25.],
        [ 0.,  5., 10., 15., 20., 25.],
        [ 0.,  5., 10., 15., 20., 25.],
        [ 0.,  5., 10., 15., 20., 25.]]),
 array([[ 0.,  0.,  0.,  0.,  0.,  0.],
        [ 5.,  5.,  5.,  5.,  5.,  5.],
        [10., 10., 10., 10., 10., 10.],
        [15., 15., 15., 15., 15., 15.],
        [20., 20., 20., 20., 20., 20.],
        [25., 25., 25., 25., 25., 25.]])]


  • matplotlib中的contour函数:
fig, ax = plt.subplots(figsize=(12,8))
contour = plt.contour(Xplot, Yplot, Z,[7*10**-9, 6*10**-7, 5*10**-5, 1.2*10**-3, 0.016],colors='k')
ax.scatter(X[:,0], X[:,1])
plt.show()

该函数用于画等高线,
第一个参数是网格的横坐标(参考上一个函数介绍你就明白什么是网格的横坐标啦)
第二个参数是网格的纵坐标
第三个参数是每个网格点的值
第四个参数是等高线的条数,你可以传入一个整数,当然你也可以传入自己设定的值,即Z中的取值,画几条等高线就传入一个列表
colors是等高线的颜色



  • scipy函数库中stats.norm(mu,sigma).pdf函数
p = stats.norm(mu,sigma).pdf(X)

该函数用于计算样本X的正态分布的概率密度,X可以传入一个值,当然也可以传入一个ndarray类型,计算的函数为:

mu = μ μ
sigma = σ σ



  • Numpy中np.logical_and函数
np.logical_and(preds == 1, yval == 1)

用于计算逻辑与,其中preds 、yval 是两个相同维度的ndarray类型,返回值也是一个同维度的ndarray类型,每个位置是一个bool类型的值,对应preds==1, yval == 1条件成立则该位置为True,否则为False。
也可以传入(3,2),(3,1)这样类似的两个维度的参数,即行数相同,并且其中一个参数仅一列,在进行比较时,多列的那个参数只要有一列成立,则返回True,否则返回False



  • Numpy包的concatenate函数
def serialize(X,theta):
    return np.concatenate((X.ravel(),theta.ravel()))

上面定义的这个函数是一个序列化的函数(也可以称为向量化),用于将输入的两个矩阵转为向量来存储,这里用到了concatenate函数,它的参数是一个元组,比如(X,Y),如果没有指定axis参数,默认axis = 0,两个矩阵将会上下排列,如果X.shape[1]和Y.shape[1]不相同的话将会报错,如果指定axis = 1,则两个矩阵左右排列,此时要求X.shape[0]=Y.shape[0]
一定要注意(X,Y)是以元组的形式传入的



猜你喜欢

转载自blog.csdn.net/tiaochewang219/article/details/107715205