代码规范
文件组织 python中模块的导入要用到import函数,若要导入自定的模块,若导入模块与运行文件在同一目录下,则直接输入导入模块的名字即可。若不在同一目录,则需要写出相对路径。模块可以看做是类和函数的集合。 查看模块搜索路径:sys.path 包 &库 一般认为一个’*.py’文件是一个module,为了python应用更具扩展性,我们可以多个模块(module)组织成文件层次,这就产生了包(package)。 一个文件夹是一个package,一个package下可以有多个module,但是一个module只能属于一个package。 包的出现使得在创建模块时名字的冲突问题得以解决。需要注意的是在每个文件夹下都要建立一个_init__.py文件以保证Python将该文件夹所在的路径当做一个存在的包来处理,该文件夹可以是空的,也可以用来执行一些初始化代码或者声明全局 变量 Python中的库(library)是借用其他编程语言的概念,没有特别具体的定义,Python库着重强调其功能性。在Python中,具有某些功能的模块和包都可以被称作库。 导入模块/包 impor...
time模块
这一模块常用的是计时器函数,其次是时间戳函数。 time.sleep(sec):计时器函数,让工作暂停 time.time():返回当前时间的时间戳,计算自1970.1.1到现在的时间差(通常叫做纪元,是不同系统之间最简单的交换日期和时间的方法)。 time.ctime():将纪元值转化为字符串(“Mon Feb 3 22:31:03 2014”) time.localtime():默认返回一个struct_time,也可将一个时间参数传入该函数返回出对应的struct_time time.mktime():把stuct_time转化为纪元值(struct_time只能精确到秒) time.strftime(format, [t]): 把一个struct_time转换成格式化的时间字符串。格式由传入的format确定。支持的符号表如下: import timenowtime=time.time()print("today",nowtime)str1=time.strftime("今天是%Y年%m月的第%d天",time.localt...
EM算法及其推广
EM算法 对于一般概率模型的学习策略,我们往往会采取极大似然估计或者贝叶斯估计的方法对模型的参数进行估计,但是需要注意的是这种估计方法都是建立在待估参数全部为已经知道结果的参数的基础之上的(complete-data problem)。当模型中有隐变量/潜在变量(数据不可观测的变量)时,似然函数的最大化变得困难。这是就可以使用EM算法,EM算法是在不完全数据下求解MLE估计结果的一种近似求解方法,用迭代去逼近原来不完整数据问题的结果。EM算法主要分为两步: E:求期望(expectation) M:求极大(maximization) EM算法的核心思想是在既定样本数据下在因变量最有可能的分布状态下利用极大似然估计模型的参数。 算法导出 针对一个含有隐变量的概率模型,这里假设隐变量为Z,观测数据Y关于参数θ\thetaθ的对数似然函数为L(θ)L(\theta)L(θ): \begin{equation} \begin{aligned} L(\theta) & = \log P(Y|\theta)=log\sum_{Z}P(Y,Z|\theta)\\ &=\l...
Logistic Regression
当因变量的类型属于二元(1 / 0,真/假,是/否)变量时,应该使用逻辑回归。这里,Y的值为0或1,它可以用以下方程表示: \begin{equation*} \begin{aligned} odds &= \frac{p}{1-p}\\ &=\frac{probability\hspace{5pt} of\hspace{5pt} event\hspace{5pt} occurrence}{probability\hspace{5pt} of\hspace{5pt} not\hspace{5pt} event \hspace{5pt} {}occurrence} \end{aligned} \end{equation*} 其中有: logit(p)=log(odds)=b0+b1X1+⋯+bkXklogit(p)=\log(odds)=b_0+b_1X_1+\dots+b_kX_k logit(p)=log(odds)=b0+b1X1+⋯+bkXk 为什么要在公式中使用对数log呢?因为在这里使用的是二项分布(因变量),需要选...
监督学习方法
Perceptro n &LR& Boosting \begin{align*} &Perceptron:\sum-yf_w(x)\\ &LR:\log_2(1+\exp(-yf_w(x))\\ &AdaBoost:\exp(-yf_w(x)) \end{align*} 可以看出,相较于简单的感知机模型,后两种模型的损失函数更加光滑,且对噪声数据比较明显(分类错误误差的增加比较多)
函数
Parameters and Arguments? Parameters、 Arguments两个单词虽然都翻译成参数的含义,但是其实这两个单词是有区别的,大概就是形参与实参的区别: A parameter is the variable defined within the parentheses during function definition. An argument is a value that is passed to a function when it is called. It might be a variable, value or object passed to a function or method as input. python的输入参数主要分为位置参数(Positional Arguments)和关键词参数(Keyword Arguments)。 也就是说python在定义函数时的参数(parameter)是不分位置参数和关键词参数的,只有在调用时才会区别区分这两种参数,或者理解成以位置/关键词参数的形式传递参数 位置参数 位置参...
python内置函数
Python很贴心地将一些常用的功能设置成了内置函数。 这些函数无须从模块中导入,也无须定义就可以在任意位置直接调用。 除了平时我们会用到的一些求字符串长度的简单内置函数,python还给提供了几种相对高级一点的内置函数。善用这些给出的内置函数能够使得代码更加简洁! lambda函数 lambda函数是用来快速创建一个自定义匿名函数的,省去了平时需要用到的def 结构,例如: f=lambda x: x*2+1f(3) 执行结果为7 捕获变量值 有的时候我们在定义匿名函数时,可能希望该函数能使用某变量的值,这样的话可以实现对定义函数的"动态更新",但需要注意的是,匿名函数定义时并不会记录变量的值,而是会在调用该函数时去捕捉变量的值: c=10f=lambda x:x+cc=30g=lambda x:x+cprint(f(20),g(20))#要解决这个问题可以在声明函数时设置变量的默认值c=10f=lambda x,c=c:x+cc=30g=lambda x,c=c:x+cprint(f(20),g(20)) map函数 map函数的输入值是一个映射关系和一个...
模型评价基础
机器学习训练模型用的数据集和测试数据用的训练集互斥,往往通过测试集的测试误差来近似模型的泛化能力,根据模型的泛化能力评价模型的优劣。 误差是学习器的实际预测输出与样本的真实输出之间的差异。 训练误差,或称经验误差,是学习器在训练集上的误差。 学习器在在新样本上的误差,称为泛化误差。 模型评价主要是根据训练误差和泛化误差,来选择最优的模型及其参数的过程。 回归模型评价方法 6个评价指标: 平均绝对误差:所有样本实际值与预测值差值绝对值和的平均值 均方差((Mean Squared Error,MSE):实际值与预测值差的平方的和的平均值 解释回归模型的方差得分(Explained Variance Score): explained_variance(y,y^)=1−Var{y−y^}Var{y}explained\_variance(y,\hat{y})=1-\dfrac{Var\{y-\hat{y} \}}{Var\{y\}} explained_variance(y,y^)=1−Var{y}Var{y−y^} 取值范围[0,1],真实值与预测值差值的方差越小,...
Python的抽象魔法--类
面向对象简介 面向对象使得我们可以只去关注一件事情的参与者就好了,而不用关注参与者以外的东西。 面向对象的好处 一般来说,提及面向对象而不是直接使用全局变量或者函数的好处有以下三个: 多态 多态( polymorphism)源自希腊语,意思是“有多种形态”。多态赋予了我们不需要关注对象的类型就可以对其进行操作的能力。不同对象可以定义相同的方法,进而通过object.method()即可对对象进行操作,只要我们调用的对象拥有我们需要的方法,我们就可以对对象进行操作(操作的行为也会随着对象所属的类而不一样)。 拿方法count()举一个简单的例子: x=['hello, World',[1,2,'e','e',4]]print(x.count('e')) 我们并不关心x到底是什么对象(list or str),我们关心的只是x里边到底有多少个e。只要x里有一个名为 count()的方法,借助这个方法我们能实现我们希望返回的整数,这就足够了。 每当无需知道对象是什么样的就能对其执行操作时,都是多态在起作用...
决策树模型
人们的决策过程是一个类似“观察因素A的情况,再根据A的情况观察因素B的情况”的形式,从而形成一种树状结构。决策树学习是模仿人类这一结构化决策过程而发展起来的一种有监督机器学习方法。 它可以被认为是if-then规则的集合,也可以被认为是定义在特征空间和类空间上的条件概率分布。 模型具有可读性 分类速度快 决策树的思想主要来源于Quinlan在1986年提出的ID3和1993提出的C4.5算法,以及由Breiman等人1984年提出的CART算法。 模型 决策树学习本质上是从训练数据集中归纳出一组分类规则或者条件概率模型(在节点处取条件概率最大的进行分类)。决策树问题一般可以分成特征选择、决策树生成、剪枝三部分。 特征选择:通过建立一个函数来衡量特征划分的效果 生成:递归构造决策树的过程 剪枝:递归产生的决策树往往会递归到不能分类为止,这会导致出现过拟合现象,因此需要已经生成的决策树进行剪枝(pruning),一般是通过极小化决策树整体的损失函数(loss function)或者代价函数(cost function)来实现。 剪枝也可以看成是对模型的正则化(Reaular...
