决策树算法
机器学习中的分类和预测算法的评估
准确率
速度
健壮性
可规模行
可解释性
什么是决策树/判定数(decision tree)决策时是一个类似流程图的树结构,其中,每个内部节点表示一个属性上的测试,每个分支代表一个属性的输出,而每个树叶节点代表类或类分布。输的最顶层是根节点。
熵(entropy)概念1948年,香农提出了“信息熵(entropy)”的概念
一条信息的信息量大小和它的不确定行是有直接的关系,要搞清楚一件非常不确定的事情,或者使我们一无所知的事情,需要大量的信息,信息的度量就等于不确定性的多少。
$${ H(X) = -\sum P(x)\log }$$
变量的不确定性越大,熵也就越大。
决策树算法ID31970-1980, J.Ross. Quinlan ID3算法
未完待续
CNN基于Tensorflow实现cifar10数据集80准确率
数据导入和预处理本文使用的是CIFAR10的数据集。CIFAR10包含了十个类型的图片,有60000张大小为32x32的彩色图片,其中50000张用于训练,10000张用于测试。数据集共分为5个训练块和1个测试块,每个块有10000个图像,包含以下数据:
data——1个数据块中包含1个10000*3072大小的uint8s数组,数组每行存储1张32x32图像,第一个1024数组包含红色通道,下一个1024数组包含绿色通道,最后一个1024包含蓝色通道。图像存储以行顺序为主,所以数组的前32列为图像的第一行红色通道的值。
lables——1个数据块包含1个10000数的列表,范围为0-9,分别对应图片不同的分类,索引值i的数值表示数组data中的第i个图片的标签。
123456789101112131415161718192021222324252627282930313233def load_CIFAR_batch(filename): """ 载入cifar数据集的一个batch """ with open ...
拓扑排序
关于拓扑排序在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(Topological sorting)。
每个顶点出现且只出现一次;
若A在序列中排在B的前面,则在图中不存在从B到A的路径。
也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。
在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。
先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。
一直做改操作,直到所有的节点都被分离出来。
如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。
C语言实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 ...
求多项式的根
问题描述求多项式
$$ax^{11}-3x^8-5x^3-1=0$$
的根,要求a用屏幕进行输入,根的精度为0.0000001,并且说可能无解。
C语言实现123456789101112131415161718192021222324252627282930313233343536373839#include <stdio.h>#include <math.h>/** * 牛顿迭代求根 *///带入原函数后所得的值double f(double a, double x){ return (a*pow(x,11)-3*pow(x,8)-5*pow(x,3)-1)/1.0;}//带入一阶导函数后所得的值double f1(double a, double x){ return (a*11*pow(x,10)-24*pow(x,7)-15*pow(x,2))/1.0;}//牛顿迭代函数double F(double a, double x){ double x1; x1=x-1.0*f(a, ...
由先序遍历和后序遍历推中序遍历
问题描述给定一棵二叉树的前序遍历和后序遍历,给出一种可能的中序遍历结果
输入示例:
A B D C E
D B E C A
输出示例:
一种可能的中序遍历结果为:D B A E C
C语言实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102#include <stdio.h> #include <stdlib.h>#include <string.h>typedef struct TreeNode { struct TreeNode* left; struct TreeNode* right; char elem; } TreeNode;/** * 截取s字符 ...
markdown公式常用符号对应表
字母
代码
$\alpha$
\alpha
$\beta$
\beta
$\gamma$
\gamma
$\delta$
\delta
$\Delta$
\Delta
$\epsilon$
\epsilon
$\varepsilon$
\varepsilon
$\zeta$
\zeta
$\eta$
\eta
$\theta$
\theta
$\Theta$
\Theta
$\vartheta$
\vartheta
$\iota$
\iota
$\kappa$
\kappa
$\lambda$
\lambda
$\Lambda$
\Lambda
$\mu$
\mu
$\nu$
\nu
$\xi$
\xi
$\Xi$
\Xi
$\pi$
\pi
$\Pi$
\Pi
$\varpi$
\varpi
$\rho$
\rho
$\varrho$
\varrho
$\sigma$
\sigma
$\Sigma$
\Sigma
$\varsigma$
\varsigma
$\ ...
关于JVM
JVM的内存模型JVM所管理的内存分为一下几个运行时数据区:
程序计数器
java虚拟机栈
本地方法栈
java堆
方法区
程序计数器(Program Counter Register)一块比较小的内存空间,它是当前线程所执行的字节码的行号指示器,通过该计数器的值来确定下一条需要执行的字节码指令,分支、跳转、循环等都要依赖它来实现。每条线程都有一个独立的程序计数器,各个线程之间的计数器相互独立、互不影响,该区域是线程私有的。
当线程在执行一个java方法是,该计数器记录的是正在执行的虚拟机字节码指令地址,当线程在执行的是Native方法(调用本地操作系统方法)时,该计数器值为空。
该内存区域是唯一一个在java虚拟机中没有规定任何OOM(out of memory)情况的区域
java虚拟机栈(Java Virtual Machine Stacks)该区域也是线程私有的,它的生命周期和线程相同。
虚拟机栈描述的是java方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧,栈它用于支持虚拟机进行方法调用和方法执行的数据结构。对于执行引擎来讲,活动线程中,只有栈顶的栈帧是有效的, ...
单例模式
定义单例模式用来保证一个类在运行其间只有一个实例会被创建,另外单例模式还提供全局唯一的访问实例的接口
实现单例模式的方法懒加载(线程不安全)1234567891011public class Singleton { private static Singleton uniqueInstance; private Singleton (){} public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance; }}
懒加载模式,当有多个线程并行调用getInstance()方法的时候,会有多个实例被创建,因此它是线程不安全的,也就是说在多线程下不能正常工作。
懒加载(线程安全)该模式在上面的方法上加一个同步锁(synchronized)即可:
123456p ...
选择排序算法
选择排序算法基本思想就是,先将整个序列分为有序区和无序区两个部分,有序区为空,每次从无序区查找最小元素与无序区的第一个记录进行交换,这样经过n-1次,整个序列就变成有序了
C++语言实现:
12345678910111213141516171819202122232425262728#include<iostream>using namespace std;void selectSort(int r[], int n) { int i, j, index; for(i = 0; i < n-1; i ++) { index = i; for(j = i + 1; j < n; j ++) { if(r[index] > r[j]) { index = j; } } if(index > i) { int temp ...
冒泡排序算法
冒泡排序算法基本思想就是:依次比较相邻两个数,如果前面的数比后面大(降序),则交换两个数,这样的话第一轮遍历结束会浮出最大的数(就像水中的气泡一样,最大的先浮上来),最多经过n-1次,该序列成为有序序列。
C++实现:
12345678910111213141516171819202122232425262728#include<iostream>using namespace std;void BubbleSort(int r[], int n) { int b, exchange = n-1; while(exchange != 0) { b = exchange; exchange = 0; for (int i = 0; i < b; i++) { if(r[i] > r[i+1]) { int temp = r[i]; r[i] = r[i + 1]; ...








