机器学习--ML
文章平均质量分 54
UESTC_C2_403
如果大家对博客内容有什么建议或者问题,可以在博客下面留言哦,谢谢大家!
展开
-
机器学习中样本的样本量的估计
在机器学习中,如果样本量不足,我们利用模型学习到的结果就有可能是错误的,因为样本不足的情况下,规则会有很多。也就是我们如果用f表示真是的规则,用g表示利用模型学习到的规则。那么我们希望g和f越接近越好,可是我们并不知道f到底是什么?如果样本不足,机器是没法学习的。例如:给你123,输出为246。有人会说那就是对应元素乘以2,这是一种规则。还有别的规则,第一个数字是原来数的第二位,后面两位分原创 2017-06-04 15:06:53 · 14401 阅读 · 0 评论 -
python利用SVM做手写体识别
from sklearn.datasets import load_digitsdigits = load_digits()print digits.data.shapefrom sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(di原创 2017-06-03 00:09:53 · 3691 阅读 · 0 评论 -
python LogisticRegressing 实现
import pandas as pd;import numpy as np;import matplotlib.pyplot as plt;df_train = pd.read_csv('breast-cancer-train.csv')df_test = pd.read_csv('breast-cancer-test.csv')d原创 2017-06-03 00:10:47 · 681 阅读 · 0 评论 -
矩阵求逆引理(matrix inversion lemma)
若矩阵A∈CN×N,C∈CN×N,均为非奇异矩阵(矩阵可逆),矩阵B∈CN×M,D∈CM×N,则矩阵A+BCD具有逆矩阵:(A+BCD)-1=A-1-A-1B(DA-1B+C-1)-1DA-1 后来找到了一个比较简单的方法,虽然可能不很严密,但是如果需要使用这个引理而又不记得具体表达时,就可以用手推出来。 首先必须记住的是可逆矩阵A+BCD的逆可以表示成转载 2017-06-03 07:55:39 · 8715 阅读 · 3 评论 -
机器学习中的特征变换(核函数)
在机器学习中,我们提供的数据不一定都是完全线性可分的,很多情况下会存在线性不可分,可是我们需要处理成线性可分,所以我们可以采用特征变换或者核函数的形式,把数据投影到别的空间。数据在A空间不可分,投影到B空间就可能会线性可分,B空间的维度一般会高于A空间的维度。1.一般情况下,我们考虑将数据投影到别的空间,比如采用多项式。假设x的维度d,如果投影到别的空间,维度会急剧增大,造成维度灾难。维度比较原创 2017-06-08 09:43:21 · 6299 阅读 · 0 评论 -
机器学习中训练样本不均衡问题
在实际中,训练模型用的数据并不是均衡的,在一个多分类问题中,每一类的训练样本并不是一样的,反而是差距很大。比如一类10000,一类500,一类2000等。解决这个问题的做法主要有以下几种:欠采样:就是把多余的样本去掉,保持这几类样本接近,在进行学习。(可能会导致过拟合)过采样:就是增加比较少样本那一类的样本数量,比如你可以收集多一些数据,或者对数据增加噪声,如果是图像还可以旋转,裁剪,缩放原创 2017-06-04 16:18:57 · 4410 阅读 · 1 评论 -
机器学习学习中评价模型好坏的标准
准确率(Accuracy):这个公式计算比较简单,就是预测正确的样本数量除以总的样本数量但是很多时候,这个往往不能满足要求,比如样本不平衡,比如我们更加关心另一类的预测情况,这就会有问题, 比如你的样本不均衡,以两类问题为例:如果+1为10000,-1为50,那么只要过拟合,即使-1全部分错,正确率也是非常高的。如果我们更加关心-1的分类情况,这也没法实现。所以引入了另外的指标准确率(Ac原创 2017-06-04 16:41:50 · 5787 阅读 · 1 评论 -
KL散度(Kullback-Leibler Divergence)
今天开始来讲相对熵,我们知道信息熵反应了一个系统的有序化程度,一个系统越是有序,那么它的信息熵就越低,反之就越高。下面是熵的定义 如果一个随机变量的可能取值为,对应的概率为,则随机变量的熵定义为 有了信息熵的定义,接下来开始学习相对熵。熵是随机变量不确定性的度量,不确定性越大,熵就越大,如果是常量,就是零。不原创 2017-07-10 15:04:48 · 10113 阅读 · 1 评论 -
KNN算法理解
最近在看《机器学习实战》这本书,因为自己本身很想深入的了解机器学习算法,加之想学python,就在朋友的推荐之下选择了这本书进行学习。 一 . K-近邻算法(KNN)概述 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类。但是怎么可能所有测试对象都会找到与之完全匹配的训练对象呢,其次就是存在一个原创 2017-07-07 14:32:41 · 4219 阅读 · 0 评论 -
机器学习中几种损失函数的分析
在机器学习中,损失函数是非常重要的,用于衡量目标结果的好坏,用于训练模型,损失函数就是目标函数了。常见的损失函数有以下几种:1.‘0/1损失函数’f(z)=1, 如果z是小于零的,其他就等于0.性质:不是凸函数,不是连续的函数,数学性质不是非常好,一般用于感知机算法,感知机算法的损失函数就是这个。为了克服这个函数不连续,不是凸函数的问题,出现了其他几种可以替代的函数2.hinge损原创 2017-07-14 09:04:14 · 5679 阅读 · 2 评论 -
F-散度(F-divergence)
在概率统计中,f散度是一个函数,这个函数用来衡量两个概率密度p和q的区别,也就是衡量这两个分布多么的相同。1.f散度的定义p和q是同一个空间中的两个概率密度函数,它们之间的f散度可以用如下方程表示:f函数满足两个条件:f函数是一个凸函数,并且f(1)=0。2.f散度的特例如果f(x)=xlogx,那就是KL散度。如果是f(x)=-logx,那就表示reverse KL散原创 2017-07-16 18:25:31 · 15705 阅读 · 0 评论 -
EM算法
(EM算法)The EM Algorithm EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法。在之后的MT中的词对齐中也用到了。在Mitchell的书中也提到EM可以用于贝叶斯网络中。下面主要介绍EM的整个推导过程。1. Jensen不等式 回顾优化理论中的一些概念。设f是定义域为实转载 2017-07-07 20:23:14 · 1085 阅读 · 0 评论 -
BP神经网络
反向传播算法又称BP算法(Back Propagation) 使用sigmoid函数(这是一个激励函数,对于不同的情况可以使用不同的激励函数,为了讲解方便,这里就采用这个激励函数来说明问题,其他的激励函数可以参考:http://blog.csdn.net/uestc_c2_403/article/details/73431428)的感知器来搭建一个多层神经网络,为简单起见,此处我原创 2017-07-10 09:25:50 · 14169 阅读 · 3 评论 -
三种梯度下降的方式:批量梯度下降、小批量梯度下降、随机梯度下降
在机器学习领域中,梯度下降的方式有三种,分别是:批量梯度下降法BGD、随机梯度下降法SGD、小批量梯度下降法MBGD,并且都有不同的优缺点。下面我们以线性回归算法为例子来对三种梯度下降法进行比较。1. 线性回归假设 特征 和 结果 都满足线性。即不大于一次方。这个是针对 收集的数据而言。收集的数据中,每一个分量,就可以看做一个特征数据。每个特征至少对应一个未知的原创 2017-07-10 11:11:41 · 37977 阅读 · 10 评论 -
机器学习中常见的几种归一化方法以及原因
在机器学习中,数据归一化是非常重要,它可能会导致模型坏掉或者训练出一个很奇怪的模型,为了让机器学习的模型更加适合实际情况,需要对数据进行归一化处理。1.机器学习中常用的归一化方法:2. 不同归一化方法分析:线性变换和极差法(线性归一化)将原始数据线性化的方法转换到[0 1]的范围,该方法实现对原始数据的等比例缩放。通过利用变量取值的最大值和最小值(或者最大值)将原始数据转换原创 2017-07-22 20:19:39 · 40928 阅读 · 5 评论 -
损失函数(Loss function)和代价函数(成本函数)(Cost function)的区别与联系
1.损失函数(Loss function)是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的哦,用L表示2.代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。注意:定义的方式不同哦,两者是相辅相成原创 2017-08-18 21:26:37 · 26586 阅读 · 0 评论 -
参数(parameters)和超参数(hyperparameters)
在机器学习或者深度学习领域,参数和超参数是一个常见的问题,个人根据经验给出了一个很狭隘的区分这两种参数的方法。参数:就是模型可以根据数据可以自动学习出的变量,应该就是参数。比如,深度学习的权重,偏差等超参数:就是用来确定模型的一些参数,超参数不同,模型是不同的(这个模型不同的意思就是有微小的区别,比如假设都是CNN模型,如果层数不同,模型不一样,虽然都是CNN模型哈。),超参数一般就是根据原创 2017-08-20 14:36:58 · 59405 阅读 · 2 评论 -
python 利用sklearn中的朴素贝叶斯作文本文类代码
from sklearn.datasets import fetch_20newsgroupsnews = fetch_20newsgroups(subset = 'all')print len(news.data)print news.data[0]from sklearn.cross_validation import train_test_splitX_train, X_t原创 2017-06-03 00:09:17 · 683 阅读 · 0 评论 -
python中利用KNN实现对iris进行分类
from sklearn.datasets import load_irisiris = load_iris()print iris.data.shapefrom sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(iris.data,原创 2017-06-03 00:08:53 · 4091 阅读 · 0 评论 -
梯度下降学习速率的选择和存在的问题
在机器学习中,我们经常会碰到利用梯度下降的算法,通过迭代找到一个可行解,这个解不一定是最优解。但是在利用梯度下降算法求解的过程中,学习速率的选择是一个很重要的问题,如果速率过大,那么很有可能会导致求解的过程不稳定,会出现问题。如果速率太小,那么求解的速度太慢,不利于算法的求解。为了解决这个问题,不同的人会采用不同的思路。1.采用固定的学习速率,这就会存在上面的问题,为了克服不稳定性,所以可能会原创 2017-06-06 10:35:14 · 5993 阅读 · 0 评论 -
机器学习中产生overfitting的可能性和解决overfitting的方法
产生overfitting的可能性1.数据量不够2.数据存在噪声3.模型太复杂4.选择的模型不符合实际解决的方法1.模型从简单的开始做2.数据清洗,去除噪声等等。(标定的错误数据修正,错误的数据也可丢掉。实际应用中没有很好的方法甄别错误的数据,存在不同的方法。这方法有时候有用)3.增加数据。(比如图像可以旋转、平移、缩放等,不能元素数据相差太多,或者收集更多原创 2017-06-06 23:26:59 · 4655 阅读 · 0 评论 -
机器学习中模型的选择
在机器学习领域,模型选择是一个十分重要的课题,在我们只有训练数据的情况下,我们没法知道准确模型是什么?也没有任何先验的信息来说明模型的样子。并且我们也没有测试数据,虽然我们经常做机器学习模型的时候,给的数据会包含测试数据,其实在做模型的时候,测试数据是没有的,或者你不知道的。公开数据库上面的测试数据是用来衡量你的模型的好坏的。但是当你在实际中做机器模型的时候是不存在的,我们有的数据就是训练数据,在原创 2017-06-07 10:39:23 · 1578 阅读 · 0 评论 -
机器学习中的validation
在机器学习领域中,模型的检验十分重要,用于判断机器学习到的模型的好坏。主要有以下两种:留一验证:留一验证比较简单,就是从任务提供的数据中随机采样一定比例作为训练集,剩下的留作验证集。通常,这个比例为7:3,也有很多是会是3:1等等。也就是70%作为训练,30%作为模型验证。这有一个问题,那就是随机采样验证集存在不确定性。验证集合不是测试集,这是不同的两个概念。交叉验证:交叉验证其实原创 2017-06-04 15:56:15 · 2289 阅读 · 0 评论 -
如何让机器学习的模型表现的更好
1. 对训练数据不做过多解释,模型简单比较好,模型简单对数据的解释就比较简单,解释的会更好。用简单的模型解释资料可以解释的话,可以说明数据的规律,如果模型复杂,就不知道数据的规律。所以做机器学习的时候先从简单的模型开始做起。模型简单:参数比较少或者模型假设比较少,这两者其实是有关系的。2. 抽样偏差(sampling bias)。也就是你的训练数据来自的分布与实际的分布不相符合,就原创 2017-06-07 15:18:41 · 956 阅读 · 0 评论 -
PCA特征降维
特征降维是无监督学习的另一个应用,目的有两点:其一就是我们经常会在时间项目中面对特征维度非常高的训练样本,二往往又无法借助自己的领域知识人工构建有效特征;其二就是在数据表现方面,我们无法用肉眼观测超过三个维度的特征。因此降低维度不仅仅重构了有效的低维度特征向量,同时也为数据展现提供了可能。在特征降低维度的算法中,主成分分析是最为经典和实用的特征降低维度的方法,特别在辅助图像识别方面有突出的表现。原创 2017-06-02 23:29:07 · 1077 阅读 · 0 评论 -
python实现kmeans算法
import numpy as np;import matplotlib.pyplot as plt;import pandas as pd;digits_train = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra', header = None原创 2017-06-02 23:29:43 · 1908 阅读 · 0 评论 -
python实现集成回归算法,包括随机森林,极端随机森林,梯度boosting算法
from sklearn.datasets import load_bostonboston = load_boston()from sklearn.cross_validation import train_test_splitimport numpy as np;X = boston.datay = boston.targetX_train, X_test, y_trai原创 2017-06-02 23:30:22 · 8673 阅读 · 9 评论 -
python实现K近邻回归,采用等权重和不等权重
from sklearn.datasets import load_bostonboston = load_boston()from sklearn.cross_validation import train_test_splitimport numpy as np;X = boston.datay = boston.targetX_train, X_test, y_trai原创 2017-06-02 23:31:00 · 2145 阅读 · 0 评论 -
python实现支持向量回归,包括线性,多项式,径向基
from sklearn.datasets import load_bostonboston = load_boston()from sklearn.cross_validation import train_test_splitimport numpy as np;X = boston.datay = bos原创 2017-06-02 23:31:33 · 6133 阅读 · 1 评论 -
机器学习算法对数据的要求以及使用的情况
1.数据量大于10万采用随机梯度下降,效果不错,大大的节约时间成本2.数据量小于1万的可以采用kmeans聚类算法,无效果采用特殊聚类或者GMM模型。大于1万的采用minibatch kmeans算法。使用kmeans聚类的前提是聚类类别数量知道。3.聚类类别数量未知的情况下,数据量小于1万时,采用meanshift或者VBGMM模型,大于1万时,就咩有什么有效的算法4.聚原创 2017-06-02 23:33:09 · 7099 阅读 · 0 评论 -
python实现房价预测,采用回归和随机梯度下降法
from sklearn.datasets import load_bostonboston = load_boston()from sklearn.cross_validation import train_test_splitimport numpy as np;X = boston.datay = boston.targetX_train, X_test, y_trai原创 2017-06-02 23:36:06 · 5437 阅读 · 0 评论 -
集成模型python实现,随机森林,梯度提升决策树
import pandas as pd;titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')X = titanic[['pclass', 'age', 'sex']]y = titanic['survived']X['age'].fillna(X['ag原创 2017-06-02 23:36:38 · 3277 阅读 · 0 评论 -
python中利用决策树实现泰坦尼克死亡和生还人生的分类
import pandas as pd;titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')print titanic.info()X = titanic[['pclass', 'age', 'sex']]y = titanic['survived']原创 2017-06-02 23:37:45 · 1672 阅读 · 0 评论 -
python中的sklearn.feature_extraction dictvectorizer
class sklearn.feature_extraction.DictVectorizer(dtype=<type 'numpy.float64'>, separator='=', sparse=True,sort=True)[source]Transforms lists of feature-value mappings to vectors.This transformer转载 2017-06-02 23:38:23 · 3506 阅读 · 0 评论 -
python 中的pandas.DataFrame.fillna
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)[source]Fill NA/NaN values using the specified methodParameters:value :转载 2017-06-02 23:38:59 · 8728 阅读 · 0 评论 -
机器学习中训练集、验证集(开发集)、测试集如何划分
1.传统的机器学习领域中,由于收集到的数据量往往不多,比较小,所以需要将收集到的数据分为三类:训练集、验证集、测试集。也有人分为两类,就是不需要测试集。比例根据经验不同而不同,这里给出一个例子,如果是三类,可能是训练集:验证集:测试集=6:2:2;如果是两类,可能是训练集:验证集=7:3。因为数据量不多,所以验证集和测试集需要占的数据比例比较多。2.在大数据时代的机器学习或者深度学习领域中原创 2017-08-31 14:17:58 · 18328 阅读 · 0 评论