在本文中,将深入探讨Python中的高级编程概念,包括迭代器(Iterators)、生成器(Generators)和装饰器(Decorators)。此外,还将讨论支持向量机(SVM)及其最大边界分类器和软边界分类器,并介绍SVM中的几种核函数,包括线性核、多项式核和RBF核。这些概念对于数据科学家来说在日常工作中经常使用,理解这些概念可能比实际应用更为复杂。对于Python新手来说,很容易对迭代器、生成器和装饰器的概念感到困惑。为了澄清这些概念并更好地理解它们,将讨论这些概念及其在Python中的实现。
迭代器是对象或集合,允许逐个元素地迭代。这样的迭代器例子包括列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)。Python提供了'iter()'关键字来创建迭代器,以及'next()'关键字来访问元素。现在问题来了,"为什么要创建迭代器,当可以直接迭代列表、集合或字典呢?"迭代器使程序员能够执行延迟操作。可以在不遍历之前元素的情况下访问下一个元素。因此,需要迭代器来节省CPU时间和内存。Python中的内置迭代器类包括enumerate、reversed、zip、map和filter。
生成器是创建迭代器的函数表达式。函数返回值,而生成器返回迭代器。要创建生成器,使用'yield'关键字而不是'return'。可以像使用迭代器一样使用生成器对象,使用'next'关键字或通过'for'循环迭代它。'yield'关键字在定义的状态暂停函数,而'return'语句终止该函数。生成器表达式与生成器函数不同。这样的表达式被用作函数参数,并像列表推导式一样创建。生成器表达式使用延迟评估并一次创建一个元素,而列表推导式计算整个列表。因此,生成器表达式更加内存高效。
正如其名,Python中的装饰器就像用于装饰函数的对象。装饰器接受一个函数作为参数,然后应用其定义的功能到该函数,并返回装饰后的函数作为输出。装饰器用于控制或修改函数或类的行为。在定义函数/类之前调用装饰器。Python中有两类不同的装饰器:类装饰器和函数装饰器。让在Python中实现函数装饰器。还可以定义多个装饰器。
SVM是最受欢迎的机器学习算法之一。这种监督算法被用于分类和回归问题。在这里,将讨论SVM算法背后的高级概念。最大边界分类器是一种假设类型,最好地解释了SVM分类器的工作。这种分类器创建一个超平面,然后将输入分类到超平面的两侧。分割输入特征空间的线是超平面。超平面和预测之间的边界越大,它的表现就越好。
假设有一个数据集(x),其中包含两个输入变量,形成一个二维空间。目标变量具有二进制标签,0和1。现在,可以在这个二维空间中将超平面可视化为一条线。假设超平面分离了所有输入点。例如:
B0 + (W1*X1) + (W2*X2) = 0
W1和W2决定了线的斜率,B0是截距。X1和X2是两个输入特征向量。这条线有助于使用方程对输入值进行分类。如果方程的输出大于零,则输入位于线上方。如果方程返回的值小于零,则点将位于线下方。输出值接近零表示输入接近超平面。那个点很难分类。绝对值大的值可能有更高的概率被正确分类。边界是线和最近数据点之间的垂直距离。最佳线是通过优化过程决定的,使用最优权重和偏置。最佳线是将两个类别用最大边界分隔的最大边界超平面。帮助构建分类器并相关于确定超平面的点是支持向量。
在现实生活中使用的数据通常是混乱的,不能被超平面分隔。因此,寻找超平面的标准被放宽,引入了软边界分类器。这种柔软性使数据点能够违反超平面线。软边界分类器有额外的参数,为每个维度提供边界柔软空间。这种增加增加了模型的复杂性,因为它有更多的参数供模型拟合数据以匹配这种复杂性。这样的参数之一是C,它决定了所有维度允许的柔软度大小。这个系数决定了边界违规的灵活性范围。如果C=0的值,灵活性也没有,它与最大边界相同。它表明超平面边界的违规直接与C成比例。在超平面的学习过程中位于边界下方的训练数据点或示例是支持向量。这些向量也影响超平面的位置,C也影响这些点。C的值小使算法对训练数据更敏感,导致过拟合(高方差和低偏差)。C的大值降低了算法对训练数据的敏感性,导致欠拟合(低方差和高偏差)。因此,SVM算法确定了分隔类别的超平面。SVM使用核函数来增加模型的复杂性,以适应更复杂的数据。
核函数不过是点积。SVM中有几种核函数。主要使用线性核、RBF核和多项式核。
对于二进制分类,使用线性核或线性SVM。
K(x, xi) = sum(x*xi)
对于更复杂的类别或多类分类,使用更复杂的核。
多项式核使用多项式表达式而不是点积。
K(x, xi) = 1 + sum(x*xi)^d
K(x,xi) = exp(-gamma*sum(x*xi^2))