机器学习API文档(演示) (一)监督学习
来源:互联网 发布:淘宝网店如何转让 编辑:程序博客网 时间:2024/06/07 23:59
在阅读之前..。请原谅我英语不好,因为我不是说英语的人。
开始吧!
关于 用于node.js的机器学习库。还可以在浏览器中使用此库。(演示) 这是国家预防机制和集散地。您可以在这里找到本文档中使用的所有示例代码。
安装 对于Node.js,首先从NPM安装模块。
npm install machine_learning
var ml = require('machine_learning');
若要在浏览器中使用此库,请包含Machine_learning.min.js文件。<script src="/js/machine_learning.min.js"></script>
然后你可以像这样使用模块。var result = ml.nmf.factorize({ // variable 'ml' is the module. matrix : matrix, features : 3, epochs : 100});
监督学习
逻辑回归
首先,准备分类数据集。下面是一个例子。
var x = [[1,1,1,0,0,0], [1,0,1,0,0,0], [1,1,1,0,0,0], [0,0,1,1,1,0], [0,0,1,1,0,0], [0,0,1,1,1,0]];var y = [[1, 0], [1, 0], [1, 0], [0, 1], [0, 1], [0, 1]];
变量y的每一行都应该是二进制标签向量。 在这种情况下,数据集有两个标签。 然后,使用该数据集创建新的逻辑回归类。
var classifier = new ml.LogisticRegression({ 'input' : x, 'label' : y, 'n_in' : 6, 'n_out' : 2});
如您所见,输入和标签字段是我们要分类的数据集。 字段n_in和n_out分别是输入向量和标号向量的维数。
classifier.train({ 'lr' : 0.6, 'epochs' : 2000});
字段LR和EIRCHS分别是学习速率和训练时间。最后,可以使用此分类器对新数据进行分类。
var test_x = [[1, 1, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0], [1, 1, 1, 1, 1, 0]];console.log("Result : ",classifier.predict(test_x));/* Result : [ [ 0.9913047066877619, 0.008695293312237968 ], [ 0.008695293312237968, 0.9913047066877619 ], [ 0.5000000000000001, 0.49999999999999994 ] ] */
在对分类器进行训练时,模块会在控制台中记录一些培训信息。可以使用以下代码控制日志记录级别。classifier.set('log level',1);0:没有,1:信息,2:警告。
实际上,我建议您将日志级别字段设置为0。您可以看到如何通过使用getRestruction信息熵方法对分类器进行良好的训练。
console.log("Entropy : "+classifier.getReconstructionCrossEntropy());
该方法计算了标号向量y的重建交叉熵(RCE)。 RCE由下列方程计算。训练后,可以得到输出层的Logistic回归分类器的权重矩阵W和偏差向量b。
console.log("W : " + classifier.W);console.log("b : " + classifier.b);
另外,在训练分类器之前,还可以用一定的值初始化权重矩阵W和偏差向量b。(在调用分类器的训练方法之前。默认值为零矩阵/向量。)classifier.W = initial_W;classifier.b = initial_b;classifier.train({...});
首先,准备分类数据集。下面是一个例子
var x = [[0.4, 0.5, 0.5, 0., 0., 0.], [0.5, 0.3, 0.5, 0., 0., 0.], [0.4, 0.5, 0.5, 0., 0., 0.], [0., 0., 0.5, 0.3, 0.5, 0.], [0., 0., 0.5, 0.4, 0.5, 0.], [0., 0., 0.5, 0.5, 0.5, 0.]];var y = [[1, 0], [1, 0], [1, 0], [0, 1], [0, 1], [0, 1]];
然后,使用这个数据集创建新的多层感知器.var mlp = new ml.MLP({ 'input' : x, 'label' : y, 'n_ins' : 6, 'n_outs' : 2, 'hidden_layer_sizes' : [4,4,5]});
如您所见,输入和标签字段是我们要分类的数据集。 字段n_ins和n_out分别是输入向量和标号向量的维数。 字段隐藏层的大小是每个隐藏层中隐藏单元的数量。例如, [4,4,5]表示具有结构“输入”-“4单位隐藏层”-“4单位隐藏层”-“5单位隐藏层”-输出的MLP。现在是训练分类器的时候了。
mlp.train({ 'lr' : 0.6, 'epochs' : 20000});
字段LR和EIRCHS分别是学习速率和训练时间。最后,可以使用此分类器对新数据进行分类。
在对分类器进行训练时,模块会在控制台中记录一些培训信息。可以使用以下代码控制日志记录级别。var
test_x = [[0.5, 0.5, 0., 0., 0., 0.], [0., 0., 0., 0.5, 0.5, 0.], [0.5, 0.5, 0.5, 0.5, 0.5, 0.]];console.log("Result : ",mlp.predict(test_x));/* Result : [ [ 0.9938587852428853, 0.006129518061725184 ], [ 0.006093644091104495, 0.9939203795412749 ], [ 0.5107729901219014, 0.4892207646122191 ] ] */
classifier.set('log level',1); // 0 : nothing, 1 : info, 2 : warning.
实际上,我建议您将日志级别字段设置为0。 您可以看到如何通过使用getRestruction信息熵方法对分类器进行良好的训练。
console.log("Entropy : "+mlp.getReconstructionCrossEntropy());
该方法计算了标号向量y的重建交叉熵(RCE)。 RCE由下列方程计算。经过训练,你可以得到你的多层感知器的权重矩阵W和每个隐藏层和输出层的偏差b。
for(var i=0; i < mlp.sigmoidLayers.length; i++) { if(i !== mlp.sigmoidLayers.length-1) { console.log((i+1)+"th hidden layer W : ", mlp.sigmoidLayers[i].W); console.log((i+1)+"th hidden layer b : ", mlp.sigmoidLayers[i].b); } else { console.log("output layer W : " + mlp.sigmoidLayers[i].W); console.log("output layer b : " + mlp.sigmoidLayers[i].b); }}
另外,当创建多层感知器实例时,可以用一定的值初始化权重矩阵W和偏差向量b。(当调用分类器的构造函数方法时。缺省值分别为随机矩阵和零向量,分别表示权重W和偏置向量b。var mlp = new ml.MLP({ 'input' : x, 'label' : y, 'n_ins' : 6, 'n_outs' : 2, 'hidden_layer_sizes' : [4,4,5], 'w_array' : [initial_W1, initial_W2, initial_W3, initial_W4], 'b_array' : [initial_b1, initial_b2, initial_b3, initial_b3] // undefined field will be initialized with default value.});
您可能已经看到代码,类似于mlp.sigmoidLayers[i]这个变量是 i 是4层隐藏层实例,隐藏层的默认激活函数是Sigmoid函数,但您可以通过以下代码将该函数更改为自定义函数。
mlp.sigmoidLayers[i].activation = function(x) { return (1. / (1 + Math.exp(-x))); // this is sigmoid function};
隐藏层实例的一些功能。console.log("LinearOutput (Wx + b) : ",mlp.sigmoidLayers[i].linearOutput(x))console.log("output (activation(Wx + b)) : ",mlp.sigmoidLayers[i].output(x))// default 'activation' function is sigmoidconsole.log("backpropagation (x * transpose(W)) : ",mlp.sigmoidLayers[i].backPropagate(x))
支持向量机(演示)
首先,准备分类数据集。下面是一个例子。
var x = [[0.4, 0.5, 0.5, 0., 0., 0.], [0.5, 0.3, 0.5, 0., 0., 0.01], [0.4, 0.8, 0.5, 0., 0.1, 0.2], [1.4, 0.5, 0.5, 0., 0., 0.], [1.5, 0.3, 0.5, 0., 0., 0.], [0., 0.9, 1.5, 0., 0., 0.], [0., 0.7, 1.5, 0., 0., 0.], [0.5, 0.1, 0.9, 0., -1.8, 0.], [0.8, 0.8, 0.5, 0., 0., 0.], [0., 0.9, 0.5, 0.3, 0.5, 0.2], [0., 0., 0.5, 0.4, 0.5, 0.], [0., 0., 0.5, 0.5, 0.5, 0.], [0.3, 0.6, 0.7, 1.7, 1.3, -0.7], [0., 0., 0.5, 0.3, 0.5, 0.2], [0., 0., 0.5, 0.4, 0.5, 0.1], [0., 0., 0.5, 0.5, 0.5, 0.01], [0.2, 0.01, 0.5, 0., 0., 0.9], [0., 0., 0.5, 0.3, 0.5, -2.3], [0., 0., 0.5, 0.4, 0.5, 4], [0., 0., 0.5, 0.5, 0.5, -2]];var y = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1];// -1, 1 表示有2个分类
然后,使用此数据集创建新的支持向量机。如您所见,x和y字段是我们要分类的数据集。var
svm = new ml.SVM({ x : x, y : y});
现在是训练分类器的时候了。
svm.train({ C : 1.1, // 默认情况:1.0. C在支持向量机中. tol : 1e-5, // 默认情况:1E-4。高公差->高精度 max_passes : 20, // 默认值:20. 较高的max_PASS->更高的精度 alpha_tol : 1e-5, // 默认情况:1E-5。较高的α公差->高精度 kernel : { type: "polynomial", c: 1, d: 5} /* kernel : {type : "gaussian", sigma : 1.0} // this is default. kernel : {type : "linear"} // x*y kernel : {type : "polynomial", c : 1, d : 8} // (x*y + c)^d 或者你可以使用你自己的定义。 kernel : function(vecx,vecy) { return dot(vecx,vecy); } */});
您可以通过设置变量C来控制最小化错误率的重要性。通常,C值越高,错误率越小的重要性就越高。还可以通过将变量设置为l、max_PASS、alpha_TOL来控制SVM的精度。您可以使用4种类型的内核。高斯,线性,多项式和你的自定义函数。您可以在示例代码中找到每个内核的使用情况(参见注释)。
最后,可以使用此分类器对新数据进行分类。
console.log("Predict : ",svm.predict([1.3, 1.7, 0.5, 0.5, 1.5, 0.4]));// Predict : -1
该库中的支持向量机采用序列最小优化(SMO)作为训练算法。K近邻(演示)
首先,准备分类数据集。下面是一个例子。然后,使用该数据集创建新的K-近邻模型.var
data = [[1,0,1,0,1,1,1,0,0,0,0,0,1,0], [1,1,1,1,1,1,1,0,0,0,0,0,1,0], [1,1,1,0,1,1,1,0,1,0,0,0,1,0], [1,0,1,1,1,1,1,1,0,0,0,0,1,0], [1,1,1,1,1,1,1,0,0,0,0,0,1,1], [0,0,1,0,0,1,0,0,1,0,1,1,1,0], [0,0,0,0,0,0,1,1,1,0,1,1,1,0], [0,0,0,0,0,1,1,1,0,1,0,1,1,0], [0,0,1,0,1,0,1,1,1,1,0,1,1,1], [0,0,0,0,0,0,1,1,1,1,1,1,1,1], [1,0,1,0,0,1,1,1,1,1,0,0,1,0]];var
result = [23,12,23,23,45,70,123,73,146,158,64];
如您所见,数据和结果字段是我们要使用的数据集。var
knn = new ml.KNN({ data : data, result : result});
K近邻和前面提到的模型之间的区别是K近邻不需要训练步骤。因此,您可以在创建K-最近的邻居实例之后对新数据进行分类。
var prediction = knn.predict({ x : [0,0,0,0,0,0,0,1,1,1,1,1,1,1], k : 3, weightf : {type : 'gaussian', sigma : 10.0}, distance : {type : 'euclidean'} /* weightf : {type: "none"} // 默认为none weightf : {type : "gaussian", sigma : 10.0} 或者你可以用自己的权重算法。 weightf : function(x) { return Math.exp(-1.*x*x/(2*10.0*10.0)); // 高斯内核函数 } distance : {type : 'euclidean'} // 默认 或者你可以用你自己的距离算法 distance : function(x1,x2) { // 欧氏距离函数 var distance = 0; for(var i=0 ; i < x1.length; i++) { var dx = x1[i] - x2[i]; distance += dx * dx; } return Math.sqrt(distance); }; */});console.log("Prediction : ",prediction); // Prediction : 142.37964352973836
该库中的K最近邻模型支持其加权版本(内核)。有三种类型的加权函数(内核),你可以使用。没有(没有权重),高斯函数和你的自定义函数。您可以在示例代码中找到每个加权函数的用法(参见注释)。您还可以自定义此模型使用的距离函数。有两种类型的距离函数,您可以使用。欧几里德和你的定制功能。您可以在示例代码(查看注释)中找到每个距离函数的用法。
决策树(示例)
参考资料:Toby Segaran编写的“编程集体智能”。
首先,准备分类数据集。下面是一个例子。 (与编程集体智能中的示例相同)
var data = [['slashdot','USA','yes',18], ['google','France','yes',23], ['digg','USA','yes',24], ['kiwitobes','France','yes',23], ['google','UK','no',21], ['(direct)','New Zealand','no',12], ['(direct)','UK','no',21], ['google','USA','no',24], ['slashdot','France','yes',19], ['digg','USA','no',18,], ['google','UK','no',18,], ['kiwitobes','UK','no',19], ['digg','New Zealand','yes',12], ['slashdot','UK','no',21], ['google','UK','yes',18], ['kiwitobes','France','yes',19]];var result = ['None','Premium','Basic','Basic','Premium','None','Basic','Premium','None','None','None','None','Basic','None','Basic','Basic'];
然后可以使用此数据集创建新的决策树var dt = new ml.DecisionTree({ data : data, result : result});
现在,是时候构建这个决策树的基本结构了。dt.build();
该方法通过寻找最优准则自动生成决策树,从而使决策树的信息熵最小化。(分类和回归树(CART)算法)可以使用打印方法将此决策树打印到控制台。
dt.print();
现在,您可以使用此决策树对新数据进行分类。console.log("Classify : ", dt.classify(['(direct)','USA','yes',5]));
建议修剪决策树以避免过度拟合。dt.prune(1.0); // 1.0 : mingain.
该库中的决策树采用简单的剪枝算法,当合并的熵损失小于最小增益值时,将决策树的两个分支合并。 可以使用以下方法访问决策树的根节点。var tree = dt.getTree();
基本上,这个树变量是内部决策节点类的实例。对于这个决策节点实例,有几种方法。console.log("True Branch of this node : ", tree.tb);// 返回的值也是一个决策节点实例。console.log("False Branch of this node : ", tree.fb);// 返回的值也是一个决策节点实例。console.log("此节点的条件(对于数字值) : ","'If input_vector["+tree.col+"] >== "+tree.value+", classify as True'");console.log("此节点的条件(对于NaN值) : ","'If input_vector["+tree.col+"] === "+tree.value+", classify as True'");
对于决策树中的每个叶节点(树的末端),您可以获得被分类到该节点的数据。console.log("分类为叶节点的数据 : ",leaf_node.results);
如果节点不是叶节点,则节点的结果字段未定义。还可以使用以下代码打印整个决策树的子树。
dt.getTree().tb.tb.print()dt.getTree().print() // this code is same as dt.print()
阅读全文
0 0
- 机器学习API文档(演示) (一)监督学习
- 机器学习API文档(演示) (二)无监督学习
- 机器学习笔记 (一) 监督学习、无监督学习
- 机器学习--监督学习(一)
- 机器学习(一)监督学习
- 机器学习一:监督学习笔记
- 机器学习-监督学习
- 【机器学习】监督和非监督学习
- 【机器学习笔记】一、Supervised learning监督学习
- 机器学习(一)--- 监督学习之回归
- 机器学习笔记 监督学习算法小结(一)
- 机器学习(一):监督学习应用:梯度下降
- 机器学习——监督学习(一)
- 机器学习之监督学习
- 机器学习-监督式学习
- 监督学习(机器学习)
- 机器学习:半监督学习
- 机器学习--无监督学习
- 【零基础】带你学C带你飞
- springmvc 交互异常
- 测试小白禅道的软件环境搭建基础案例分享
- IIS+PHP上传数据大小限制
- 003
- 机器学习API文档(演示) (一)监督学习
- 数据结构课程设计————内部排序性能分析
- [算法分析与设计] leetcode 每周一题: Kth Smallest Element in a BST
- JavaEE颠覆者:spring-boot实战随书源码
- 封装OkHttp
- 小程序项目复制注意事项个人笔记
- Java-NIO(三):直接缓冲区与非直接缓冲区
- 【Codeforces183D】T-shirt
- 在Eclipse上安装Spring Tool Suite