import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt import random
#sigmoid函数定义
def sigmoid(x):
# print('sigmoid:',x,1.0 / (1+math.exp(-x)))
return 1.0 / (1+ np.exp(-x))
#模拟数据
x = [-2,6,-2,7,-3,3,0,8,1,10,2,12,2,5,3,6,4,5,2,15,1,10,4,7,4,11,0,3,-1,4,1,5,3,11,4,5]
x = x * 100
#转换成两列的矩阵
x = np.array(x).reshape(-1,2)
# print('x:',x,len(x))
x1 = x[:,0]
x2 = x[:,1]
# print(x1,len(x1))
# print(x2)
y = [1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1]
y = y * 100
y = np.array(y).reshape(-1,1)
y1 = y[:,0]
print('len(y):',len(y)) # a = 0.1 #学习步长 alpha
o0 = 1 #线性参数
o1 = 1
o2 = 1
O0=[]
O1=[]
O2=[]
q=[]
result = []
#随机梯度下降求参
dataindex = list(range(len(y)))
for i in range(len(y)):
a = 6/(i+1) +0.01
num = random.randint(0, len(dataindex) - 1)
index = dataindex[num]
# print('index:',index)
# print(x[i],x[i][0])
w = o0 + o1 * x[index][0] +o2 * x[index][1]
# print('w:',w)
h = sigmoid(w)
error = y[index] - h
q.append(error)
# print(num,len(num_list))
del (dataindex[num])
# print(h,y[i])
o0 = o0 + a * error * 1                #梯度上升求最大似然估计的参数值
o1 = o1 + a * error * x[index][0]
o2 = o2 + a * error * x[index][1]
O0.append(o0)
O1.append(o1)
O2.append(o2)
print(o0,o1,o2)
#测试参数
test_x = [-2,6,-2,7,-3,3,0,8,1,10,2,12,2,5,3,6,4,5,2,15,1,10,4,7,4,11,0,3,-1,4,1,5,3,11,4,5]
test_y = [1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1]
yescount = 0
for i in range(len(test_y)):
test_w = o0 + o1 * x[i][0] +o2 * x[i][1]
test_h = sigmoid(test_w)
print('测试:',test_w,y[i])
if test_h < 0.5:
result = 0
else:
result = 1
if result == y[i]:
yescount += 1
# print('正确')
print('总共{}个,正确了{}个,正确率为:{}'.format(len(test_y),yescount,yescount/len(test_y))) #参数求好了画图
fig = plt.figure()
#第一幅数据散点和回归分割线
line_x = np.arange(-4,4,0.1) #横坐标
line_y = (-o0-o1*line_x) / o2 #分割线
ax2 = fig.add_subplot(221)
ax2.scatter(x1,x2,10*(y1+1),10*(y1+1)) #测试数据的散点图
plt.grid()
plt.plot(line_x,line_y,'y-')
#第二幅参数o1 o2 o3 的变化图
ax3 = fig.add_subplot(222)
plt.grid()
plt.plot(range(len(y)),O0,'r-')
plt.plot(range(len(y)),O1,'y-')
plt.plot(range(len(y)),O2,'b-')
#第三幅数据误差error图
ax4 = fig.add_subplot(223)
plt.plot(range(len(y)),q,'b-')
plt.show()
 

机器学习之--线性回归sigmoid函数分类的更多相关文章

  1. 逻辑回归和sigmoid函数分类

    逻辑回归和sigmoid函数分类:容易欠拟合,分类精度不高,计算代价小,易于理解和实现 sigmoid函数与阶跃函数的区别在于:阶跃函数从0到1的跳跃在sigmoid函数中是一个逐渐的变化,而不是突变 ...

  2. 机器学习之sigmoid函数

      先说一下,ML小白. 这是第一次写个人博客类似东西, 主要来说说看 sigmoid 函数,sigmoid函数是机器学习中的一个比较常用的函数,与之类似的还有softplus和softmax等函数, ...

  3. 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测

    线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...

  4. 线性模型-线性回归、Logistic分类

    线性模型是机器学习中最简单的,最基础的模型结果,常常被应用于分类.回归等学习任务中. 回归和分类区别: 回归:预测值是一个连续的实数: 分类:预测值是离散的类别数据. 1.     线性模型做回归任务 ...

  5. 机器学习之线性回归---logistic回归---softmax回归

    在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题 ...

  6. 斯坦福CS229机器学习课程笔记 part2:分类和逻辑回归 Classificatiion and logistic regression

    Logistic Regression 逻辑回归 1.模型 逻辑回归解决的是分类问题,并且是二元分类问题(binary classification),y只有0,1两个取值.对于分类问题使用线性回归不 ...

  7. 机器学习之线性回归以及Logistic回归

    1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失 ...

  8. [ DLPytorch ] 线性回归&Softmax与分类模型&多层感知机

    线性回归 基础知识 实现过程 学习笔记 批量读取 torch_data = Data.TensorDataset(features, labels) dataset = Data.DataLoader ...

  9. 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

随机推荐

  1. node服务端口被占用Error listen EADDRINUSE :::3000

    Error: listen EADDRINUSE: address already in use :::3000,出现这个报错说明3000端口被占用 解决方法:找到占用该端口的程序,kill杀掉它就可 ...

  2. JGUI源码:实现日期控件显示(17)

    本文实现一个日期控件显示,日期控件看起来很复杂,其实原理很简单,大部分情况下我们直接使用别人做得好的日期控件就行,但有时候特殊需求,比如显示提醒之类的,恐怕第三方控件就不好实现了, 为了使程序逻辑看起 ...

  3. PMP知识点(三)——挣值计算汇总表

    在新标签页打开. 附参考图 资料地址:http://pan.baidu.com/s/1bMNroq

  4. Linux关闭You have new mail in /var/spool/mail/root提示

    终端远程登陆Linux后经常提示You have new mail in /var/spool/mail/root 这个提示是LINUX会定时查看LINUX各种状态做汇总,每经过一段时间会把汇总的信息 ...

  5. Python django解决跨域请求的问题

    解决方案 1.安装django-cors-headers pip3 install django-cors-headers 2.配置settings.py文件 INSTALLED_APPS = [ . ...

  6. 谷歌浏览器安装json格式化插件

    1.下载JsonView扩展程序压缩包 下载地址:https://github.com/gildas-lormeau/JSONView-for-Chrome 点击[Clone or download] ...

  7. easyui 菜单树搜索

    //树形菜单搜索方法    function searchTree(treeObj,parentNode,searchCon){        var children;        for(var ...

  8. git工具——版本的创建与回退

    1.创建一个版本库 进入要管理的文件路径:cd f:/ZK/Opencv3.4.2-YOLOv3 输入命令: git init 2.版本创建与回退 在文件目录下创建一个文件code.txt: vi c ...

  9. 虚拟机上的centos7链接不上网络: activation of network connection failed

    报错: 重启网络也不行: 解决: 1.打开网络配置文件: $vi /etc/sysconfig/network-scripts/ifcfg-ens33  (可以参照这里的描述,找到这个文件https: ...

  10. WPF 10天修炼 第六天- 系统属性和常用控件

    WPF系统属性和常用控件 渐变的背景色 WPF中的前景色和背景色不同于传统Winform的设置,这些属性都是Brush类型的值.在XAML中,当为这些属性设置指定的颜色后将被转换为SolidColor ...