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. 三、TensorFlow模型的保存和加载

    1.模型的保存: import tensorflow as tf v1 = tf.Variable(1.0,dtype=tf.float32) v2 = tf.Variable(2.0,dtype=t ...

  2. SNMP mib文件说明

    MIB file的开始和结束 所有的MIB file的都以DEFINITIONS ::= BEGIN关键字开始,以END结束.我们所有添加的节点均应在此之间. XXX-TEST-MIB DEFINIT ...

  3. Jupyter Notebook 的安装使用以及 tree 路径变更

    由于最近开始学习 Python,进而接触到一个十分强大的交互式编辑器 — Jupyter Notebook,用起来也非常顺手,于是记录一下相关的使用过程. 一.安装 Python: ①首先前往 pyt ...

  4. Java多线程访问共享资源类及类之间关系设计

    1.涉及的类 多线程类.共享资源存储类 2.类之间的关系 (1)共享资源存储类作为线程类的全局成员变量,在线程初始化时,通过setter或者构造注入(当然此处是同一个共享资源类对象),实现多个线程共享 ...

  5. selenium定位方式-获取标签元素:find_element_by_xxx

    定位方式取舍# 唯一定位方式.多属性定位.层级+角标定位(离目标元素越近,相对定位越好) # 推荐用css selector(很少用递进层次的定位)# 什么时候用xpath呢? 当你定位元素时,必须要 ...

  6. Git学习(一):初始化仓库、添加文件、版本回退

    目录 Git学习(一):初始化.添加文件.版本回退 初始化一个仓库 添加文件到Git仓库 版本回退 Git学习(一):初始化.添加文件.版本回退 初始化一个仓库 本文使用的命令行工具为cmder,部分 ...

  7. C++变量/函数命名规范

    ## 参照Google C++编程规范之变量命名 1. 变量 变量名一律小写,单词间以下划线相连.类的成员变量以下划线结尾. 普通变量命名 举例: string window_name; // OK ...

  8. 2018-2019-2 20165325 《网络对抗技术》 Exp6 信息搜集与漏洞扫描

    2018-2019-2 20165325 <网络对抗技术> Exp6 信息搜集与漏洞扫描 实验内容(概要) 1 各种搜索技巧的应用: 2 DNS IP注册信息的查询: 3 基本的扫描技术 ...

  9. @validated 验证 List 参数在spring中

    @PostMapping(value = "complete") public Vo complete(@Valid @RequestBody @Validated(Complet ...

  10. winform倒计时

    public partial class Form1 : Form { private int Seconds; public Form1() { InitializeComponent(); // ...