美文网首页
逻辑回归实现多分类

逻辑回归实现多分类

作者: 与时间赛跑_ | 来源:发表于2019-03-20 22:05 被阅读0次

hello,今天天气好冷,而且还下雨。不过很符合初春的季节。

好雨知时节,当春乃发生。。。。。(忘了。)

今天想跟大家聊聊deeplearning 的逻辑回归分类问题,虽然这视乎是一个基础的问题。但说起来好像还有许多的意义(好冷,先躲进被窝里)。

tools:node + tf.js

假定有如下的二维物体分布

从直观上看,a ,b , c各为一类,从肉眼上我们很容易给他们之间的关系划清界限。但是如果是计算机自己从这些数据中去自主的划分他们,那么要如何做呢。还有一点假设在这个分布中增加若干数量物体,那么他们应该从属哪一类呢(w,n,z)?或者说是预测。

那么我们如何来做呢?(直接上代码)

tip:(逻辑回归是机器学习常见的模型,逻辑回归一般分两步:a,更线性回归模型形式相同,一个关于输入x的函数。b,将线性函数转换成非线性函数)

const tf =require("@tensorflow/tfjs-node");

function logistic_regression(tran_data,tran_label) {

const numIterations=100;//迭代学习次数

const learningRate=0.1;//学习率

const optimizer=tf.train.adam(learningRate);

//构造一个使用adam算法的优化器

const number_of_labels=Array.from(new Set(tran_label)).length;

//从set集合中构建array(它将剔除重复的项)

const number_of_data=tran_label.length;

//训练的数据长度

const w=tf.variable(tf.zeros([2,number_of_labels]));

const b=tf.variable(tf.zeros([number_of_labels]));

//z=w^t+b

const train_x=tf.tensor2d(tran_data);

//train_x:二维矩阵,每一个分布的点的数据由(x,y)坐标组成的二元数组[x,y]

const train_y=tf.tensor1d(tran_label,"int32");

//train_y:每一个点的分类

function predict(x) {

//预测函数,尽可能的拟合观测的数据,也希望那些未被观测的数据,尽可能符合该函数

return tf.softmax(tf.add(tf.matMul(x,w),b));

// tf.softmax:给出logits,计算softmax标准化向量。

// tf.matMul(x,w):矩阵x 乘 矩阵w

//softmax和逻辑回归的关系

//看文末(给你一种豁然开朗的感觉)

}

function loss(predictions,labels) {

//损失函数:交叉熵->Li=-log((e^fˇ(yi))/(Eˇje^j))

const y=tf.oneHot(labels,number_of_labels);

const entropy=tf.mean(tf.sub(tf.scalar(1),tf.sum(tf.mul(y,tf.log(predictions)),1)));

//oneHot: 如[0,0,1,1,2,2]将被转化成

[[1,0,0],

[1,0,0].

[0,1,0],

[0,1,0],

[0,0,1],

[0,0,1]]

return entropy;

}

for(let iter=0;iter

//开始‘学习’

optimizer.minimize(()=>{

//最小化:()=>{...(也就是下面这部分)}

const loss_var=loss(predict(train_x),train_y);

loss_var.print();

return loss_var;

});

}

return function (x) {

const d=tf.tensor2d(x);

var predict_result=predict(d);

//这个将返回一个函数给外面(想想我们经过了漫长的训练,我们求得了一个最佳的拟合函数,假设这个函数为y=ax+b,其中a,b已经是一已知的,那么如果我们代入x,不就可以求得y了吗)

return predict_result.argMax(1).dataSync();

//argMax(1):返回最大的数字所在的下标(下标这里即代表所属类别)

}

}

//集合1 下面是他的所属类别 0 其他如此类推

let type1=[[1.0,1.0],[2.0,1.0],[2.0,2.0],[3.0,2.0],[3.0,3.0]];

let label1=[0,0,0,0,0];

let type2=[[2.0,4.0],[2.0,5.0],[3.0,4.0],[3.0,5.0],[4.0,5.0]];

let label2=[1,1,1,1,1];

let type3=[[4.0,2.0],[4.0,3.0],[5.0,2.0],[5.0,3.0],[6.0,3.0]];

let label3=[2,2,2,2,2];

let tempdata=type1.concat(type2).concat(type3);

let temelabel=label1.concat(label2).concat(label3);

let v=logistic_regression(tempdata,temelabel);

那么假定集合1的分布如下:

那么求k,的所属类别:

let k=[[2.0,3.0]];

let value=v(k);

console.log("类别:"+value.toLocaleString());

输出:

softmax和逻辑回归的关系

softmax函数可以把它的输入,它的输入通常被称为Logits有时也被叫做logit scores,会被处理成0-1之间。并且能够把输入

归一到和为1,那么这就意味着softmax函数和分类的概率分布等价。

举一个例子吧:

相关文章

  • 机器学习之逻辑回归

    逻辑回归 场景简介:使用逻辑回归实现对鸢尾花的分类预测。基于python基本库的实现 模型说明 逻辑回归是一个分类...

  • 逻辑回归算法(二)

    一、线型回归模型(Linear Regression) 为了更好的实现分类,逻辑回归诞生了。 [逻辑回归是假设数据...

  • Sklearn各分类算法实现

    1、逻辑回归 使用逻辑回归来实现对癌症患者的分类: 2、支持向量机 本节使用支持向量机实现对手写数字的分类 3、朴...

  • 逻辑回归

    广义线性回归 ,代表任何单调可微函数 逻辑回归---实现分类器 准备训练样本 训练分类器 对新样本分类 单位阶跃函...

  • 从0开始实现逻辑回归算法(LogicRegression)

    从0开始实现逻辑回归算法(LogicRegression) 逻辑回归(LR)算法是一个比较常见的二元分类算法,通常...

  • 逻辑回归实现多分类

    hello,今天天气好冷,而且还下雨。不过很符合初春的季节。 好雨知时节,当春乃发生。。。。。(忘了。) 今天想跟...

  • 2018-10-19

    Python与数据挖掘(二)——逻辑回归 逻辑回归一般用来实现分类 一、算法原理 1、预测函数 2、将预测函数的输...

  • 逻辑回归(Logistic Regression)和SVM的比较

    逻辑回归不是回归,是做分类,只是用回归的思路做分类罢了。 逻辑回归是传统机器学习的一种分类方法。特点是简单,高效,...

  • 机器学习day7-逻辑回归问题

    逻辑回归 逻辑回归,是最常见最基础的模型。 逻辑回归与线性回归 逻辑回归处理的是分类问题,线性回归处理回归问题。两...

  • 机器学习100天-Day4-6逻辑回归

    逻辑回归(Logistic Regression) 什么是逻辑回归 逻辑回归被用于对不同问题进行分类。在这里,逻辑...

网友评论

      本文标题:逻辑回归实现多分类

      本文链接:https://www.haomeiwen.com/subject/avyxvqtx.html