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. font-family

    Font-family: Helvetica, Tahoma, Arial, “Microsoft YaHei”, “微软雅黑”, SimSun, “宋体”, STXihei, “华文细黑”, Hei ...

  2. easyExcel导出excel的简单使用

    easyExcel导出excel的简单使用 Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定 ...

  3. console.log()在IE下不兼容问题解决

    样式改的顺风顺水,到了IE果然出了问题(奇怪,我为什么要说‘果然’?),如果在JS文件中写了console.log()方法,样式就会有缺陷,但是打开IE下的开发者工具就没问题(IE这都是什么鬼!!), ...

  4. Android AVD启动报错: This AVD's configuration is missing a kernel file! Please ensure the file "kernel-qemu" is in the same location as your system image.

    启动Android SDK manager重新下载安装

  5. ibatis .net $与#的区别

    $与#的区别 SELECT * FROM TABLE WHERE Id = #id# 其中如果字段id为字符串类型,那么#id#表示的就是'id',也就是说会自动加引号.如果id为整型,那么#id#就 ...

  6. CentOS7 安装Python

    CentOS7 安装Python 1. 前置条件 centos7 安装时 勾选Development Tools,如果你centos7没有选,需要更多必要库 必要库 # yum -y install ...

  7. 开源mall学习

    https://github.com/macrozheng/mall 学习知识点 1.Spring Security 2.@Aspect 3.logstash 4. es crud templete ...

  8. C. Neko does Maths(数论 二进制枚举因数)

     题目链接:https://codeforces.com/contest/1152/problem/C 题目大意:给你a和b,然后让你找到一个k,使得a+k和b+k的lcm. 学习网址:https:/ ...

  9. python算法&二分查找法

    import random def random_list(n): result = [] ids = list(range(1001,1001+n)) a1 = ["赵",&qu ...

  10. nodejs分离html文件里面的js和css

    摘要: 本文要实现的内容,使用nodejs 对文件的增删改查,演示的例子->分离出一个html 文件里面的script 和style 里面的内容,然后单独生成js文件和css 文件.中间处理异步 ...