朴素贝叶斯(Naive Bayes)
典型的生成学习方法,基本假设是条件独立性 模型算法 朴素贝叶斯法通过训练数据集学习联合概率分布P(X,Y),具体方法是通过参数估计的方法学习类标签的先验概率和对应的条件概率分布,然后利用贝叶斯公式对后验概率进行计算,将后验概率最大的类进行输出。 在实际计算的过程中,由于条件概率分布的参数过多,在数据量不是特别大的时候难以求得联合概率分布,于是作了条件独立性的假设(Conditionally Independent)(名字的来源,高效易实现,但分类的性能不一定高),得到最终的朴素贝叶斯分类器: 分母完全相同,上式演变为: 参数估计 极大似然估计 参数估计一般采用极大似然估计: 朴素贝叶斯估计 实际运用过程中为了避免估计的概率值为零的情况(放大了单一特征对评估结果的影响,比如一个长头发的男人会被判为出现概率为0,会影响后验概率的计算结果),一般采用贝叶斯估计: 后验概率最大化=期望风险最小化(0-1损失函数) 可以通过证明发现,后验概率最大意味着期望风险值是最小化的。同样的输入数据,当后验概率最大时,分错的期望风险也是最小的。 当变量是连续变量时,计算概率则需要其他的方法...
复制与拷贝
变量间的复制操作和拷贝操作的区别主要体现在对对象的复制和拷贝上。 创建对象时,应该是先创建对象,然后将对象的地址返回给被赋值的变量。这也导致两个变量之间的赋值操作只是存储地址的复制,因此两个变量可以视为完全一样的变量。 而对于copy命令来说,无论是浅拷贝copy还是深拷贝deepcopy,对对象的copy都会创建一个新的存储地址,因此拷贝对象的存储地址会发生改变。 deepcopy和copy的主要区别在于是否会对拷贝对象的子对象进行拷贝,浅拷贝不拷贝子对象,即子对象的存储地址是和源对象保持一致的。而深度拷贝则会通过递归拷贝将子对象一并拷贝,因此二者的子对象指向的位置是不一样的。 拷贝和复制的操作是无法通过直接观察拷贝结果来判断的,因为不管是哪种操作都会把值复制一遍,区别是是否会为这个 值创建新的地址。 from copy import copy, deepcopyclass Age(): passclass Name(): passclass Student(): def __init__(self,name,age) -> None: ...
sklearn
介绍 Scikit-learn项目始于scikits.learn,这是David Cournapeau的Google Summer of Code项目。它的名称源于它是“ SciKit”(SciPy工具包)的概念,它是SciPy的独立开发和分布式第三方扩展。原始代码库后来被其他开发人员重写。2010年费边Pedregosa,盖尔Varoquaux,亚历山大Gramfort和Vincent米歇尔,全部由法国国家信息与自动化研究所的罗屈昂库尔,法国,把该项目的领导和做出的首次公开发行在二月一日2010在各种scikits中,scikit-learn以及scikit-image在2012年11月被描述为“维护良好且受欢迎” 。Scikit-learn是GitHub上最受欢迎的机器学习库之一。 scikit-learn.pdf 8 Scikit Learn 速查表.pdf Python数据科学速查表 - Scikit-Learn.pdf
回归分析
在实际中,常常希望根据已有数据,确定因变量(数值变量)与自变量(可以是类别变量)的关系,在此关系的基础上对未知数据进行预测。这种方法叫回归分析。 一般情况下可以按照模型的形式分为线性回归和非线性回归两种形式。 分类 线性模型 线性回归是在研究相关关系时优先考虑(最为直观)的一种模型,它假定所有解释变量对被解释变量的影响是线性叠加的,一般假设总体存在如下关系(矩阵形式): \begin{equation} \boldsymbol{Y}=\boldsymbol{X} \boldsymbol{\beta}+\boldsymbol{\mu} \end{equation} 在统计学习的视角下,不同的线性模型则是从不同的假设出发建立不同的目标函数/约束条件,进而求解得到不同的估计结果,常见的线性模型有最小二乘法、岭回归、套索回归、弹性网络回归等。对于线性回归的线性也可以从多个角度理解,通过适当放松线性条件则可以得到其它的回归方法,如多项式回归(变量非线性)、 OLS 最小二乘法是用于拟合回归线最常用的方法。对于观测数据,它通过最小化每个数据点到线的垂直偏差平方和来计算最佳拟合线。 在计算总...
强化学习
强化学习(reinforcement learning.)是指智能系统在与环境的连续互动中学习最优行为策略的机器学习问题。假设智能系统与环境的互动基于马尔可夫决策过程(Markov decision process).,智能系统能观测到的是与环境互动得到的数据序列。强化学习的本质是学习最优的序贯决策。
Counter
Counter 是字典类的一个子类可以用来统计可以查数目的对象中元素个数的。 c = Counter() # a new, empty counterc = Counter('gallahad') # a new counter from an iterablec = Counter({'red': 4, 'blue': 2}) # a new counter from a mappingc = Counter(cats=4, dogs=8) # a new counter from keyword args 对于没有的元素进行查询时会返回 0 而不会报错。 如果要想把一个元素从计数器中移出,要使用del 与字典对象相比,计数器对象还有三个额外的方法: elements():返回一个和统计结果完全一致的列表。 c = Counter(a=4, b=2, c=0, d=-2)list...
分类方法
线性分类方法 感知机和线性判别分析/Fisher分析是非常经典的硬分类线性模型,模型提出都比较早。 感知机 感知机是二类分类的线性分类模型。 感知机只在求出线性可分的分类超平面,通过梯度下降法对损失函数极小化建立感知机模型。 感知机1957年由Rosenblatt提出,是神经网络和支持向量机的基础 模型 输入空间是实例向量组成的空间,输出空间是-1和+1(正负两类)。建立如下函数: \begin{align*} f(x)&=sign(\omega \cdot x+b)\\ \omega&:weight\quad or\quad weight\quad vector\\ b&:bias \end{align*} 策略 感知机学习算法是错误驱动的,刚开始提出时以误分类样本点数量为损失函数,但因为该函数不连续,所以后来变成了最小化样本点到直线的距离。 算法(原始形式) 具体采用随机梯度下降法(SGD)。 收敛性 Novikoff定理告诉我们线性可分数据集经过有限次迭代可以得到一个将训练数据集完全正确划分的分离超平面及感知机模型。当训练集线性不可分时,感...
爬虫注意
大多数浏览器都支持对网页的审查,在对我们提取的数据的位置进行定位时往往需要借助网页的开发者工具。鼠标右键选择对网页“检查”即可打开该功能 检查浏览器DOM时的注意事项 当我们查看网页的DOM时,我们看到的并不是原本的html文件,而是浏览器清理和执行过Java代码的网页。例如火狐会给网页中的表格元素添加元素,但如果这样的东西出现在我们的xpath语句中,则不能提取出任何东西。 在对网页审查在开发者模式下禁用JavaScript(或者可以右键查看页面源代码) 不要使用包含全部路径的Xpath的语句(避免包含/tbody)使用相对路径或者比较大的搜索语句 动态网页抓取 在抓取网页时,有的页面是经过几次连续的请求才抓取成功的,这个时候我们可以借助检查工具中的“网络”来对网页加载的请求进行一个查看。拿https://quotes.toscrape.com/scroll网站举一个例子,打开该网站发现,该网站的页面加载功能是当我们将页面滚动到最下面之后自动加载出来的。这个时候就需要用到Net-work Tool了。打开对应的网页: 注意选定保留日志选项,防止日志被自动清楚。打开该窗口我...
神经网络
神经网络 scikit-learn提供了MLPClassifier()和MLPRegression()两个类,分别用于神经网络分类和回归任务。 多层感知器(MLP) 的监督学习算法,通过在数据集特征 X = {x1, x2, …, xm} 和标签y上训练来学习函数:MLPClassifier(): class sklearn.neural_network.MLPClassifier(hidden_layer_sizes=(100, ), activation='relu', solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0...
