当前位置: 首页 > news >正文

网站地址做图标特大新闻凌晨刚刚发生

网站地址做图标,特大新闻凌晨刚刚发生,wordpress网站首页空白,wordpress怎么设置主页目录鸢尾花数据集逻辑回归原理【1】从线性回归到广义线性回归【2】逻辑回归【3】损失函数【4】总结TensorFlow实现一元逻辑回归多分类问题原理独热编码多分类的模型参数损失函数CCETensorFlow实现多分类问题独热编码计算准确率计算交叉熵损失函数使用花瓣长度、花瓣宽度将三种鸢… 目录鸢尾花数据集逻辑回归原理【1】从线性回归到广义线性回归【2】逻辑回归【3】损失函数【4】总结TensorFlow实现一元逻辑回归多分类问题原理独热编码多分类的模型参数损失函数CCETensorFlow实现多分类问题独热编码计算准确率计算交叉熵损失函数使用花瓣长度、花瓣宽度将三种鸢尾花区分开总结鸢尾花数据集 150个样本 4个属性 花萼长度(Sepal Length) 花萼宽度(Sepal Width) 花瓣长度(Petal Length) 花瓣宽度(Petal Width) 1个标签山鸢尾(Setosa)、变色鸢尾(Versicolour)、维吉尼亚鸢尾(Virginica) 逻辑回归原理 【1】从线性回归到广义线性回归 广义线性回归通过联系函数对线性模型的结果进行一次非线性变换使他能够描述更加复杂的关系。 【2】逻辑回归 阶跃函数不是一个单调可微的函数、可以使用对数几率函数替代 sigmoid函数将-无穷无穷的输入转化到0,1 【3】损失函数 线性回归的处理值是连续值不适合处理分类任务 用sigmoid函数将线性回归的返回值映射到(0,1)之间的概率值然后设定阈值实现分类 sigmoid函数大部分比较平缓导数值较小这导致了参数迭代更新缓慢 在线性回归中平方损失函数是一个凸函数只有一个极小值点 但是在逻辑回归中它的平方损失函数是一个非凸函数有许多局部极小值点使用梯度下降法可能得到的知识局部极小值 所以在逻辑回归中一般使用交叉熵损失函数联系统计学中的极大似然估计 注意式子 标签分别等于1,0时的损失函数曲线 损失函数的性质1、非负性保证不同性质的样本误差不会相互抵消2、一致性函数的值应该与误差的变化趋势一致。 这两点交叉熵损失函数都能保证并且此函数还有很大的优势无需对sigmoid函数求导 可以有效解决平方损失函数参数更新过慢的问题偏导数的值只受到预测值与真实值之间误差的影响 并且它还是个凸函数所以使用梯度下降法得到的最小值就是全局最小值 【4】总结 TensorFlow实现一元逻辑回归 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt xnp.array([137.97,104.50,100.00,126.32,79.20,99.00,124.00,114.00,106.69,140.05,53.75,46.91,68.00,63.02,81.26,86.21]) ynp.array([1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,0]) #plt.scatter(x,y) #中心化操作使得中心点为0 x_trainx-np.mean(x) y_trainy plt.scatter(x_train,y_train) #设置超参数 learn_rate0.005 #迭代次数 iter5 #每10次迭代显示一下效果 display_step1 #设置模型参数初始值 np.random.seed(612) wtf.Variable(np.random.randn()) btf.Variable(np.random.randn()) #观察初始参数模型 x_startrange(-80,80) y_start1/(1tf.exp(-(w*x_startb))) plt.plot(x_start,y_start,colorred,linewidth3) #训练模型 #存放训练集的交叉熵损失、准确率 cross_train[] acc_train[] for i in range(0,iter1):with tf.GradientTape() as tape:#sigmoid函数pred_train1/(1tf.exp(-(w*x_trainb)))#交叉熵损失函数Loss_train-tf.reduce_mean(y_train*tf.math.log(pred_train)(1-y_train)*tf.math.log(1-pred_train))#训练集准确率Accuracy_traintf.reduce_mean(tf.cast(tf.equal(tf.where(pred_train0.5,0,1),y_train),tf.float32))#记录每一次迭代的损失和准确率cross_train.append(Loss_train)acc_train.append(Accuracy_train) #更新参数dL_dw,dL_db tape.gradient(Loss_train,[w,b])w.assign_sub(learn_rate*dL_dw)b.assign_sub(learn_rate*dL_db)#plt.plot(x,pred)if i % display_step0:print(i:%i, Train Loss:%f,Accuracy:%f%(i,cross_train[i],acc_train[i]))y_start1/(1tf.exp(-(w*x_startb)))plt.plot(x_start,y_start)#进行分类并不是测试集测试集是有标签的数据而我们这边没有标签这里是真实场景的应用情况 #商品房面积 x_test[128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00,162.00,114.60] #根据面积计算概率这里使用训练数据的平均值进行中心化处理 pred_test1/(1tf.exp(-(w*(x_test-np.mean(x))b))) #根据概率进行分类 y_testtf.where(pred_test0.5,0,1) #打印数据 for i in range(len(x_test)):print(x_test[i],\t,pred_test[i].numpy(),\t,y_test[i].numpy(),\t) #可视化输出 plt.figure() plt.scatter(x_test,y_test) x_np.array(range(-80,80)) y_1/(1tf.exp(-(w*x_b))) plt.plot(x_np.mean(x),y_) plt.show()训练误差以及准确率损失函数迭代 新样本测试模型 多元逻辑回归则是用多个特征变量去解决二分类问题这里就不做详细展开。 多分类问题原理 独热编码 多分类的模型参数 二分类问题模型输出的是一个连续的函数。 多分类问题模型输出的是概率。 二分类的模型参数是一个列向量W(n1行) 多分类的模型参数是一个矩阵W(n1行n1列) 这里使用softmax回归(而不是对数几率函数)。 softmax回归适用于样本的标签互斥的情况。比如样本的标签为房子小车和自行车这三类之间是没有关系的。样本只能是属于其中一个标签。 逻辑回归使用于样本的标签有重叠的情况。比如外套大衣和毛衣一件衣服可以即属于大衣由属于外套。这个时候就需要三个独立的逻辑回归模型。 关于理论的讲解可以转到下面链接 softmax回归 吴恩达机器学习 损失函数CCE 举个例子 TensorFlow实现多分类问题 逻辑回归只能解决二分类问题 独热编码 a[0,2,3,5] #独热编码 #one_hot(一维数组/张量,编码深度) btf.one_hot(a,6) print(b)效果 tf.Tensor( [[1. 0. 0. 0. 0. 0.][0. 0. 1. 0. 0. 0.][0. 0. 0. 1. 0. 0.][0. 0. 0. 0. 0. 1.]], shape(4, 6), dtypefloat32)计算准确率 步骤 导入预测值 导入标记 将标记独热编码 获取预测值中的最大数索引 判断预测值是否与样本标记是否相同 上个步骤判断结果的将布尔值转化为数字 计算准确率 #准确率#预测值 prednp.array([[0.1,0.2,0.7],[0.1,0.7,0.2],[0.3,0.4,0.3]]) #标记 ynp.array([2,1,0]) #标记独热编码 y_onehotnp.array([[0,0,1],[0,1,0],[1,0,0]])#预测值中的最大数索引 print(tf.argmax(pred,axis1)) #判断预测值是否与样本标记是否相同 print(tf.equal(tf.argmax(pred,axis1),y)) #将布尔值转化为数字 print(tf.cast(tf.equal(tf.argmax(pred,axis1),y),tf.float32)) #计算准确率 print(tf.reduce_mean(tf.cast(tf.equal(tf.argmax(pred,axis1),y),tf.float32)))结果 tf.Tensor([2 1 1], shape(3,), dtypeint64) tf.Tensor([ True True False], shape(3,), dtypebool) tf.Tensor([1. 1. 0.], shape(3,), dtypefloat32) tf.Tensor(0.6666667, shape(), dtypefloat32)计算交叉熵损失函数 #交叉损失函数 #计算样本交叉熵 print(-y_onehot*tf.math.log(pred)) #计算所有样本交叉熵之和 print(-tf.reduce_sum(-y_onehot*tf.math.log(pred))) #计算平均交叉熵损失 print(-tf.reduce_sum(-y_onehot*tf.math.log(pred))/len(pred))效果 tf.Tensor( [[-0. -0. 0.35667494][-0. 0.35667494 -0. ][ 1.2039728 -0. -0. ]], shape(3, 3), dtypefloat64) tf.Tensor(-1.917322692203401, shape(), dtypefloat64) tf.Tensor(-0.6391075640678003, shape(), dtypefloat64)使用花瓣长度、花瓣宽度将三种鸢尾花区分开 import tensorflow as tf import pandas as pd import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt #加载数据 #下载鸢尾花数据集iris #训练数据集 120条数据 #测试数据集 30条数据 import tensorflow as tf TRAIN_URL http://download.tensorflow.org/data/iris_training.csv train_path tf.keras.utils.get_file(TRAIN_URL.split(/)[-1],TRAIN_URL)df_iris_train pd.read_csv(train_path,header0) #处理数据 iris_train np.array(df_iris_train) #观察形状 print(iris_train.shape) #提取花瓣长度、花瓣宽度属性 x_trainiris_train[:,2:4] #提取花瓣标签 y_trainiris_train[:,4] print(x_train.shape,y_train) num_trainlen(x_train) x0_train np.ones(num_train).reshape(-1,1) X_train tf.cast(tf.concat([x0_train,x_train],axis1),tf.float32) Y_train tf.one_hot(tf.constant(y_train,dtypetf.int32),3)print(X_train.shape,Y_train)#设置超参数、设置模型参数初始值 learn_rate0.2 #迭代次数 iter500 #每10次迭代显示一下效果 display_step100 np.random.seed(612) Wtf.Variable(np.random.randn(3,3),dtypetf.float32) #训练模型 #存放训练集准确率、交叉熵损失 acc[] cce[] for i in range(0,iter1):with tf.GradientTape() as tape:PRED_traintf.nn.softmax(tf.matmul(X_train,W))#计算CCELoss_train-tf.reduce_sum(Y_train*tf.math.log(PRED_train))/num_train#计算啊准确度accuracytf.reduce_mean(tf.cast(tf.equal(tf.argmax(PRED_train.numpy(),axis1),y_train),tf.float32))acc.append(accuracy)cce.append(Loss_train)#更新参数dL_dW tape.gradient(Loss_train,W)W.assign_sub(learn_rate*dL_dW)#plt.plot(x,pred)if i % display_step0:print(i:%i, Acc:%f,CCE:%f%(i,acc[i],cce[i]))#观察训练结果 print(PRED_train.shape) #相加之后概率和应该为1 print(tf.reduce_sum(PRED_train,axis1)) #转换为自然顺序编码 print(tf.argmax(PRED_train.numpy(),axis1))#绘制分类图 #设置图的大小 M500 x1_min,x2_min x_train.min(axis0) x1_max,x2_max x_train.max(axis0) #在闭区间[min,max]生成M个间隔相同的数字 t1 np.linspace(x1_min,x1_max,M) t2 np.linspace(x2_min,x2_max,M) m1,m2 np.meshgrid(t1,t2)m0np.ones(M*M) #堆叠数组S X_ tf.cast(np.stack((m0,m1.reshape(-1),m2.reshape(-1)),axis1),tf.float32) Y_ tf.nn.softmax(tf.matmul(X_,W)) #转换为自然顺序编码决定网格颜色 Y_ tf.argmax(Y_.numpy(),axis1) ntf.reshape(Y_,m1.shape) plt.figure(figsize(8,6)) cm_bg mpl.colors.ListedColormap([#A0FFA0,#FFA0A0,#A0A0FF]) plt.pcolormesh(m1,m2,n,cmapcm_bg) plt.scatter(x_train[:,0],x_train[:,1],cy_train,cmapbrg) plt.show() 效果 总结 对多分类问题的数据的划分与处理与之前有所不同。 多分类问题所用到的softmax的意义也许再多回顾。 交叉熵损失函数与极大似然估计的关联也需要再看看。
http://www.zqtcl.cn/news/416069/

相关文章:

  • 免费素材下载网站网站建设进度时间表
  • 网站做关键词首页什么是网络营销?如何理解它的产生和把握它的特点?
  • centos做网站扬州市邗江区城乡建设局网站
  • 宁波网站建设模板制作企业做网站的作用
  • 南通网站快速收录禁止wordpress自动更新
  • 济南做网站最好的公司做一电影网站怎么赚钱吗
  • 中国城市建设网站宿州网站建设零聚思放心
  • 佛山网站免费制作struts2 做的网站
  • 做网站需要了解什么软件电商网站建设方案道客巴巴
  • 网站开发语言用什么好网站好坏怎么分析
  • 镇江制作网站的dw新建站点
  • 如果将域名指向网站东营网站建设收益高
  • 沈阳seo网站推广优化c2c网站的功能
  • 网站设计深圳云南制作网站的公司
  • 广州的网站建设公司对网络平台的优化有哪些建议
  • 培训网站模板免费网站建设投标书
  • 常德市建设局网站用tornado做网站
  • 网站快速排名优化报价现在最流行的网站开发工具
  • 支付公司网站建设会计分录合肥房产信息网官网
  • 镜像网站能否做google排名宝丰网站制作公司
  • 中国公路建设协会网站网站建设 业务培训
  • 原创文章网站开发教程安徽网站建设获客企业
  • 企业网站后台怎么做南京微网站开发
  • 网站seo在线优化广告策划书的格式
  • 网站解析怎么设置三北防护林体系建设网站
  • 长沙高端网站建设公司wordpress分享缩略图
  • 支付网站建设费管理咨询公司取名
  • dw网站制作的一般流程wordpress 分类列表页
  • 重庆技术支持 网站建设公司wordpress挂黑页
  • 2网站建设类似wordpress