自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (1)
  • 收藏
  • 关注

原创 机器学习:随机森林算法及其实现

文章目录随机森林算法描述:如何对features进行bootstrap?算法代码实现:随机森林算法描述:如何对features进行bootstrap?我们需要一个feature_bound参数,每次把可以选择的features打乱,从种选出log(d)个,每次选择feature划分时都是这么选择。原来的决策树代码,是在结点的可选node维度列表里选取:for feat in self....

2018-12-31 15:18:55 1288

原创 机器学习:集成学习(ensemble),bootstrap,Bagging,随机森林,Boosting

文章目录集成学习的朴素思想Bootstrap理论Bagging随机森林Boosting集成学习的朴素思想集成学习基于这样的思想:对于比较复杂的任务,综合许多人的意见来进行决策会比“一家独大”要更好。换句话说、就是通过适当的方式集成许多“个体模型”所得到的最终模型要比单独的“个体模型”的性能更优。我们面临两个问题:如何选择、生成弱分类器和如何对它们进行提升(集成)?第一种做法期望各个弱分类器...

2018-12-31 14:28:16 1216

原创 机器学习:决策树过拟合与剪枝,决策树代码实现(三)

楔子上次讲到:至此node类的变量和方法基本实现完毕,为什么说基本呢,因为真正的后剪枝还没将,他还需要在node类里添加一些方法。这一次来讲一下后剪枝。首先,后剪枝是对整个生成树操作...

2018-12-31 12:03:40 3300 1

原创 机器学习:结点的实现,决策树代码实现(二)

文章目录楔子定义变量:定义方法获得划分的feature生成结点停止条件及其处理fit()生成树剪枝楔子前面已经实现了各种信息量的计算,那么我们划分的基本有了,那么我们需要使用这个基本来划分,来生成决策树,树的基本单元是node,这里的node是一堆数据的集合+他们内在的方法。由于需要处理三种算法,我们最好能使用基类,该类应该至少包含:1、选择划分的feature;2、根据基准划分数据生成新...

2018-12-30 11:17:21 437

原创 机器学习:样本权重的理解

样本权重在feed data的过程中,我们总是会用到samle_weight,样本权重的直观理解为:样本权重给出了各个样本的重要性。具体是怎么体现的了,首先样本权重不是把样本乘以一个系数,这样的话feature值不就改变了,他改变的是该样本的数量,本来一个样本是1个,现在变成了0.8个,或者1.5个,样本数量现在可以取小数个了,对应的这个样本在总体样本中的占比也会变化。如下代码就能体现,样本...

2018-12-29 11:48:26 14814 3

原创 机器学习:信息熵,基尼系数,条件熵,条件基尼系数,信息增益,信息增益比,基尼增益,决策树代码实现(一)

初始化,涉及到使用的变量:# =============================================================================# 计算信息量的相关算法# =============================================================================import mathi...

2018-12-27 20:00:30 2698

原创 机器学习:决策树及ID3,C4.5,CART算法描述

文章目录概念理解熵:条件熵:信息增益,互信息:信息增益比基尼指数ID3算法算法描述概念理解熵:条件熵:H(y∣A)H(y|A)H(y∣A) : A 是特征,y是目标或者分类,“条件”可以理解为 A对y的限制,假如:feature A有m个featureValue, H(y∣A)H(y|A)H(y∣A) 就是在取feature A有m个featureValue的值下,y的不确定和。H(y∣...

2018-12-27 13:25:44 389

原创 机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧

文章目录前面实现的朴素贝叶斯分类器,决策函数是非向量化的:借助于numpy向量化处理,相当于并行计算,注意mask使用技巧,用途较广:前面实现的朴素贝叶斯分类器,决策函数是非向量化的:前面提到过大数据处理,尽量避免个人的遍历等一些函数的操作,要借助numpy的强大功能,如下预测函数是按照我们平常习惯写的,先处理一个数据,处理多个数据,就是重复调用单个处理函数。# ==============...

2018-12-27 10:35:53 455

原创 机器学习:朴素贝叶斯分类器代码实现,决策函数非向量化方式

文章目录朴素贝叶斯离散型的算法描述:代码实现:实现一个NaiveBayes的基类,以便扩展:实现离散型朴素贝叶斯MultiomialNB类:实现从文件中读取数据:代码测试:朴素贝叶斯离散型的算法描述:代码实现:看算法描述比较好实现,但是实际实现起来,还是有一定难度喔有一点需要注意,在看代码或者实现代码过程中,你必须知道矩阵的每一个纬度是什么含义,这是写代码看代码的基础注释比较详细,...

2018-12-26 20:20:23 794

原创 数据预处理:读取文件数据,并存为python数组

文件的简单读取# 定义一个将文件中的数据转化为数组的类import numpy as npclass DataUtil:# =============================================================================# 从文件中读取数据# 5个参数:数据集的名称,数据集的路径,训练样本数,类别所在列,是否打乱数据 #...

2018-12-26 19:49:20 1760

原创 数据预处理:原始数据集,特征数值化,特征值数值化

原始数据集,特征数值化在原始数据集中,feature是多种多样的,为了方便处理,我们必须把feature数值化。示例:x=[[黄色,小,成人,用手打],[黄色,小,成人,用脚踩],[黄色,小,小孩,用手打],[黄色,小,小孩,用脚踩],[黄色,大,成人,用手打],[黄色,大,成人,用脚踩],[黄色,大,小孩,用手打],[黄色,大,小孩,用脚踩],[紫色,小,成人,用手打],...

2018-12-26 16:32:36 10919 2

原创 数据预处理:原始数据集快速分类的方法,numpy的使用技巧,数据的row=mask的column

问题假如数据集有3类,怎么把一个庞大的数组集3类,放在不同的数组里。分析首先庞大数据集分类,肯定不能一个一个遍历,而且强烈避免个人的操作,需要借助于numpy处理。示例数据集,可以看出数据集为3类,我们要x也分成3类x = [[1,2],[2,9],[3,9],[4,4],[5,9],[6,6],[7,7],[8,8],[9,9]]y = [0, 0, 0, 1, 1, 1, 2, ...

2018-12-26 15:52:45 1287

转载 list(map(list,zip(*a)))

在Python的numpy中,对类似array=[[1,2,3],[4,5,6],[7,8,9]];的二维数组的转置,就一句话array.T。其实不使用numpy,单纯使用Python,代码也不长,同样也是一行。不过在此之前,先说明Python中map函数与zip(*)的使用。一、map函数首先Python中的map函数是很简单的。意为将第二个参数(一般是数组)中的每一个项,处理为第一个参...

2018-12-26 12:11:34 6237

原创 机器学习:贝叶斯分类器,朴素贝叶斯,拉普拉斯平滑

数学基础:数学基础是贝叶斯决策论Bayesian DecisionTheory,和传统统计学概率定义不同。频率学派认为频率是是自然属性,客观存在的。贝叶斯学派,从观察这出发,事物的客观随机性只是观察者不知道结果,也就是观察者的知识不完备,对于知情者而言,事物没有随机性,随机性的根源不是来源于事物,而是来自于观察者对事物的只是状态。从这个角度而言,贝叶斯学派是唯心主义,频率学派是唯物主义。...

2018-12-25 16:56:08 1413

原创 机器学习:Regression,第一个简单的示例,多项式回归

# -*- coding: utf-8 -*-# 导入需要的库import numpy as npimport matplotlib.pyplot as plt# 定义存储输入数据x,目标数据yx,y = [],[]# 遍历数据集,并把数据按照顺序存在对应的list# 在文件中遍历,文件是一行一行的,每次读取的是一行数据for sample in open("_Data/p...

2018-12-25 15:28:53 324

原创 Python学习:numpy的使用技巧和注意

在实际操作中,我们需要需要养成习惯,任何浪费空间或者时间的操作都需要减少,因为我们操作的是大数据,可能造成灾难性的放大,使用numpy的思想,尽量减少不必要的拷贝,我们操作的对象是大数据。# -*- coding: utf-8 -*-# numpy是针对list操作的import numpy as np# 定义一个一维3个的数组x = np.array([1,2,3])prin...

2018-12-25 13:45:37 271 1

原创 Python学习,装饰器,元类

# 函数也是对象,可以把函数赋值给变量,使用变量调用函数def func(x): return x+1plus_one = funcprint(plus_one(1))#%%# 装饰器的思想是装饰函数的对象,使函数在自身代码不变的情况下,增加一些普适的功能import timedef decorator1(func): # 这个指的就是包装在外面的函数 ...

2018-12-25 12:44:00 88

原创 图形结构:安排课程,图的遍历策略

安排课程,N门课程相互约束,prerequests = [[1],[2],[0]],上第0门课需要先上第1门课,上第1门课需要线上第2门课,上第2门课需要线上第0门课。在这里我们需要体会图的遍历,有时并不需要完全遍历图,遍历图是按照某种策略的,比如BFS策略是遍历离当前结点最近的未遍历的所有的点,DFS遍历当前结点最近的一个点,在图的遍历中,特别是对实际问题,明确什么是点,什么是边,以及遍历的贪...

2018-12-25 10:21:07 231

原创 图形结构:克隆图,图的遍历的应用,递归和迭代

克隆一张无向图,图中的每个节点包含一个 label (标签)和一个 neighbors (邻接点)列表 。克隆图时图的遍历的应用,树的遍历,图的遍历是最基本的操作,他们和数组的遍历是一样的,线性结构的问题都是在数组遍历的基础上进行操作,同样树的问题和图的问题也都是在其遍历的基础上操作,我们所要做的是在遍历的基础上添加数据的操作。# Definition for a undirected gra...

2018-12-24 11:44:13 267

原创 图形结构:遍历模型,分治法,动态规划,回溯法,BFS,DFS

图形结构,是树形结构的扩展。我们在回溯法里面了解到几种结构:二叉树,排列树,完全n叉树,这几种解空间类型,都可以直接使用回溯法的框架解决。二叉树,排列树,完全n叉树,都可以看成x叉树的变形,而图形结构就是x叉树。在此之前,我们先明白一点:一颗二叉树是什么,他是某一颗二叉树的子树,同样的道理,一个图是什么,他是某个图的子图。一般的二叉树问题,我们先处理当前结点,再处理左子树和右子树,对应一般...

2018-12-23 12:44:12 1334 1

原创 动态规划,分治,回溯法,全排列,切片

全排列问题,可以从动态规划状态方程考虑,也可以从回溯法考虑,二者代码递归形式的代码是一致的,但是理解的角度不同动态规划:# 基于动态规划,状态方程考虑,f[n] = 首位为所有元素 + f[n-1],这个动态规划没有重复# 子问题,每一种情况都需要遍历class Solution2: def permute(self, nums): """ :typ...

2018-12-22 16:58:55 453

原创 树形结构:从二分查找,二叉搜索树寻找最近祖先,从递归到迭代,实现技巧总结

二分查找,二叉搜索树寻找最近祖先均是典型分治问题,把原问题分成三部分考虑,递归实现简单,迭代实现也比较简单,里面蕴含了一些从从递归到迭代的技巧,注意这里没有使用模拟栈技术。深究其原因是,这一类型的递归,每次查找丢弃了一半,递归到底部就找到了问题的解,搜索到最小子问题就解决了问题,类似于分支限界剪枝,剪到最后就是问题的解,不需要一层一层的回退,也就没有必要使用栈来恢复现场。二分查找,递归和迭代...

2018-12-22 14:55:58 249

原创 树形结构:二叉排列树,二叉搜索树

二叉排列树,二叉搜索树这个数听见得比较多,含义是:左边<=中间<=右边,换句话来说使用中序遍历最后得到结果就是一个有序得序列。建立一颗二叉排列树class BinTNode: def __init__(self,data=None,left =None,right =None): self.data =data self.left =lef...

2018-12-22 14:23:07 219

原创 树形结构:寻找共同祖先

寻找共同祖先输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近公共祖先是节点 3。首先是需要构造树class BinTNode: def __init__(self,data=None,left =None,right =None): self.data =d...

2018-12-22 12:01:08 1215

原创 树形结构:优先级队列,堆

优先级队列,堆是比较常用的数据结构,分支限界法,贪心法均会用到优先级队列有必要了解一下优先级队列的实现方式# -*- coding: utf-8 -*-# 最大堆# 很显然这是一个双针模型,指着一对父子,父亲小于儿子,则儿子上位def siftUp(arr,insert_index,insert_value): child_pointer = insert_index ...

2018-12-21 13:53:26 476

原创 树形结构:使用栈实现,快排,先序遍历,归并排序,后序遍历

主要还是学习使用栈模拟实现递归:# -*- coding: utf-8 -*-def partition(arr,low,high): # 这时另外一种考虑方式,而且他是不需要额外空间的,他只使用一个指针来区分小于基准和大于基准的 # pointer_less_than代表这个指针的左边全部都是小于基准的(包括自己,不包括首元素) # 然后从左往右扫描,遇到小于基准...

2018-12-20 17:02:44 759

原创 树形结构:递归转化为迭代,万能通用方法,分治策略基于栈的实现

前面提到树的3中遍历迭代实现的时候,讲到:还有一种思路,直接针对递归的实现方式,想办法通过栈来实现递归,得到的还是和上面一样一般的递归改成迭代的方法,你需要知道迭代指针是如何走的,还要借助数据结构才能实现,就是你需要注意那些需要先放入数据结构,哪些需要后放入下面介绍的方法是一种通用方法以先根遍历为例:def preorder(root): if not root: ...

2018-12-20 16:43:39 778

原创 树形结构:迭代方式遍历树,宽度优先,先序遍历,中序遍历,后序遍历

迭代的方式处理树,就必须清楚你将要访问的顺序,对应的就是指针怎么走,你必须很清楚树的宽度优先搜索,他是一层一层的访问,就搞不清楚怎么划分子问题了,但是你访问的顺序你很清楚,那么就使用迭代的方式实现,你的指针应该可以按照一层一层的走怎么走?在线性结构里,我们处理的是数组,可以直接一个一个的走在树里,按照层次访问,每一层结点之间是跳跃的,那我们该怎么实现指针的连续走动?很容易的思路,把每一层...

2018-12-19 17:15:13 1586

原创 树形结构:二叉树,分治,合并子树,递归

我们学习树的时候,一些地方用到了递归,但是可能没意识到这里面都是分治的思想=============================================================================结合这几个例子,体会一下树形结构树本来就是一个天然的递归结构,每一个递归都对应着一个递归树就二叉树而言,每一个二叉树对应着一个左子树,一个右子树都不用我们思考怎么...

2018-12-19 15:34:29 681

原创 寻找数组变化:树形结构,分治模型

寻找数组变化给定数组arr = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],返回第一个1的下标很明显需要借助于二分查找,二分查找轻微变形就可以实现第一种思路:二分查找,把数组分成3个部分,left,mid,right,判断mid是否满足要求,是的话,直接退出,否的话处理一边,这个是完全的二分查找的思路递归实现如下:def binarySearch(...

2018-12-19 11:33:50 141

原创 双针模型:验证括号,特殊case处理

我们知道双针:一般形式,两个指针都从左到右扫描,或者一头一尾两边朝中间扫描,或者在两个数组里扫描验证括号,这个问题:一个指针扫描当前数组,另一个指针指向的是栈顶元素,也是双针模型的一种变形。从这里例子,我们还需要学习一下,编码完毕之后,注意检查特殊的case,让程序perfect!!代码实现如下:# -*- coding: utf-8 -*-# 用于右括号和左括号匹配def left...

2018-12-19 10:03:35 192

原创 合并数组:双针模型,原地实现

合并数组给定两个数组a = [4,5,6,9,0,0,0]b = [1,2,3]最后输出[1, 2, 3, 4, 5, 6, 9]第一种实现方式双针模型:def sortTwoSortedArry(a,b): b_num = len(b) a_num = len(a)-b_num li = [] i ,j =0,0 # 双针模型从左往右...

2018-12-18 16:36:13 206

原创 kSum,实现方式,动态规划

kSum关于3Sum可以,先遍历第一个数,剩下的和求2Sum对于kSum的问题,很容易想到使用动态规划,问题规模由3个方面:元素个数n,kSum的k,以及目标target状态方程为:dp[n][k][target] = dp[n-1][k-1][target-arr[n]] (选第n个数)+ dp[n-1][k][target](不选第n个数)为可能性问题,最后必须装满,也就是k=0时,t...

2018-12-18 14:33:38 1519

原创 TwoSum,从O(n^2)到O(nlogn)再到O(n)

TwoSum,两数之和Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not us...

2018-12-18 12:04:09 670

原创 算法优化:动态规划加速,货物运输问题,四边形不等式, 从O(n^2)到O(n^3)

货物运输问题递归方程为:更为一般形式的递归方程看起来是不是像可以使用分治的策略实现,但是min里面子问题太多了,只能使用动态规划的招了。i,j是什么含义了?动态规划里i,j都是指的是问题规模,对应到货物运输问题指的是什么了?我们从数学上理解i,j是指数组arr = [1,2,3,4,5,6,7,8]两边的标号,或者子问题对应的起始和终止标号,类似与快排里面的数组的标号,实际问题抽象为...

2018-12-17 13:59:38 1436

原创 算法优化:最大m个子段和,问题规模从1个子段和扩展到m个,动态规划

最大m个子段和,问题规模从1个子段和扩展到m个,动态规划问题规模由2个决定,一是子段数m,二是元素个数n,准确的说是最后一个子段终止的标号b(i,j)定义为:前j个元素中有i个子段,且第i个子段包含j,i个子段和为b(i,j)那么原问题的最优解为max{b(m,j)},m<=j<=n还是不是针对原问题动态规划,动态规划的问题是可能解,最后在可行解里面找最优解根据b(i,j)定...

2018-12-16 17:13:34 1636

原创 算法优化:最大子段和,最大子矩阵和,一维,二维情况分析,动态规划

最大子段和,前面b[j]理解的是:终点在j的最大连续子段和,及从k:j最大和是对b[j]进行动态规划,从k:j最大和:取决于k:j-1的最大和,他大于0的话,就为k:j-1的最大和+arr[j],他小于0的话,就只是arr[j]终点在j一共有n种情况,原问题只是求b[j]的最大值从上面可以看出,终点在j的最大连续子段和这个还是很刁钻的,解决问题你不从原问题直接去分解,而去想“终点在j的最...

2018-12-16 13:18:16 724

原创 算法优化:最大字段和,双指针遍历(n^2),分治法(nlogn),动态规划(n)

最大字段和,有点类似与最长公共子序列,这里是求连续一段求和最大的一段,比如[-2,11,-4,-4,13,-5,-2]最大求和的连续一段为11,-4,-4,13,和为16.最基本的双针模型遍历,两个指针,分别代表最大和序列的起始和终止,算法时间复杂度O(n^2)# 以下算法时间复杂度O(n^2)def maxSum(arr): num = len(arr) # 记录最好的结果...

2018-12-15 16:50:23 723

原创 分治法:BFPTR算法找第k小

BFPTR算法来自于Blum、Floyd、Pratt、Rivest、Tarjan这5个人,一起发布了一篇名为 “Time bounds for selection” 的论文,有兴趣可以看一下:https://pan.baidu.com/s/1QEWjZBrjEJ7zTIrI99sFYA。下面是一种实现方式,这种有一个问题,只是找到中位数了,标号还要搜索然后此时的数组是有结构规律的,划分数组的时...

2018-12-15 12:37:37 318

原创 找中位数,找第k小,还存在问题

找第k小上次介绍了找第二大使用的方法时,使用锦标赛的方法,找到最大,在最大的手下败将里找第二大,也就是亚军在冠军的手下败将里产生,亚军只败给过冠军,这种方法比较次数时(n-1) + (logn-1),这个时间复杂度最优的方案了为O(n)那么怎么找第k大了,季军只能在冠军和亚军的手下败将里产生,第四名只能在前三名手下败将里产生。。。。这个方法也是O(n),但是需要记录每个选手的手下败将名单还有...

2018-12-14 17:15:57 193

mnist_10k_sprite.png

mnist test data ---image version for embedding Visualization

2018-06-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除