逻辑回归实现多分类

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函数和分类的概率分布等价。

举一个例子吧:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容