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. blackbox_exporter介绍

    Blackbox Exporter是Prometheus社区提供的官方黑盒监控解决方案,其允许用户通过:HTTP.HTTPS.DNS.TCP以及ICMP的方式对网络进行探测. 1.安装部署 cd /u ...

  2. I/O模型系列之五:IO多路复用 select、poll、epoll

    IO多路复用之select.poll.epoll IO多路复用:通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. 应用:适用于针 ...

  3. python入门篇

    第一篇:python入门 第二篇:数据类型.字符编码.文件处理 第三篇:函数 第四篇:模块与包 第五篇:常用模块 第六篇:面向对象 第七篇:面向对象高级 第八篇:异常处理 第九篇:网络编程 第十篇:并 ...

  4. knockoutjs复杂对象的可观察性

    问题 对于一般数据结构: 1. 对于基本类型的数据的变更的可观察性(observable), 可以使用  ko.observable(xxx) 来声明一个 observable对象, 或将其绑定到视图 ...

  5. python3 练手实例8 批量命名图片

    #coding:utf-8 import os import tkinter as tk from tkinter import filedialog root = tk.Tk() root.with ...

  6. SimpleDateFormat 线程不安全及解决方案

    SimpleDateFormat定义 SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析(文本 -> 日期 ...

  7. 网络结构---从alexnet 到resnet

    AlexNet-> vgg vgg 采用更小的卷积核,加深网络深度,但两者的共同点都是卷积层+pooling层最后接上fc 层的结构 Network in network ->google ...

  8. Lambda表达式概念与基本语法

    Lambda表达式是Java 8的重要更新,一个被广大开发者期待已久的新特性.Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被 ...

  9. 修改elementui默认样式

    转发连接:https://blog.csdn.net/weixin_41557291/article/details/80606525 在需要更改的组件里新增一个style标签[重点:不要加scope ...

  10. 417 事件、监听、jQuery、轮播手动

    am:通用事件 a链接事件阻止默认行为 return false HTML元素大都包含了自己的默认行为,例如:超链接.提交按钮等.我们可以通过在绑定事件中加上return false来阻止它的默认行为 ...