统计学习方法(第二章)--感知器(python实现以及sklearn调用)
统计学习方法(第二章)--感知器(python实现以及sklearn调用)
统计学习方法(第二章)–感知器(python实现以及sklearn调用)
找到一个分离超平面y=f(wx + b),可以将数据分开,使wx + b>0的属于正类,wx + b<=0的属于负类。因此感知器是一个线性二分类模型。
三要素:
模型:y = f(wx + b)
策略:定义损失函数,误分类的点到超平面的距离和最小化。点到超平面的距离公式是|wx+b|/||w||.因为限制误分类的点,所以y(wx+b)<=0.忽略第二范数||w||。则损失函数L(Y,f(X)) = -y(wx+b)之和,x属于误分类的点。
算法:随机梯度下降法。分别对w,b求偏导,w偏导=-yx,b偏导=-y,因为是下降,所以相减。
w = w - w偏导 = w + etayx, (eta是学习速率)
b = b - b偏导 = w + etay
1给模型变量赋初值。w = [0,0,0…],维数是样本特征个数,b= 0 ,eta=1.
2随机取一个训练样本数据(xi,yi),检验yi*(wxi+b)<=0.
如果y(w*x+b)<=0.则根据公式更新权值向量w和偏置b
如果>0,则随机取下一个样本。
3 直至权值向量w和偏置b能正确分类所有数据。
由值向量w和偏置b的更新公式可知,
w = alpha* y* x之和(x是所有样本数据),alpha的意义是没有样本误分类的次数eta速率。
b = alphay之和
因此感知器公式 y = f(alpha* y* x之和* x + b)
过程:1给模型变量赋初值。alpha = [0,0,0…],维数是样本数量,b= 0 ,eta=1.
2随机取一个训练样本数据(xi,yi),检验 yi* (alpha* y* x之和* xi + b)<=0.
如果<=0,则alphai(alpha第i维) += eta,b = eta* yi
如果>0,则随机取下一个样本。
直至权值向量w和偏置b能正确分类所有数据。
准备数据
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data,columns=iris.feature_names)
df['label'] = iris.target
df.head()
选取数据及画图
data = np.array(df.iloc[:100,[0,1,-1]])
X,y = data[:,:-1],data[:,-1]
y = np.array([1 if i==1 else -1 for i in y]) #将其他类别设置成-1
#画图,看看是否线性可分
fig = plt.figure()
idx1 = np.where(y>0) #返回正样本的下标
idx2 = np.where(y<=0)#返回负样本的下标
plt.scatter(data[idx1,0],data[idx1,1],c='b',marker='o')
plt.scatter(data[idx2,0],data[idx2,1],c='orange',marker='*')
plt.show()
定义感知机
class Perceptrons(object):
def __init__(self,eta = 0.1):
self.eta = eta
def fit(self,X,y):
#特征个数
numFeatures = X.shape[1]
#样本个数
numLines = X.shape[0]
#初始化向量
self.wb = np.zeros(numFeatures+1) #+1是存储偏置b
#是否有误分类
isWrong = True
#误分类个数
wrongNum = 0
while isWrong:
wrongNum = 0
for xi,yi in zip(X,y):
if yi*(np.sum(self.wb[1:]*xi) + self.wb[0])<= 0:
self.wb[1:] += self.eta * yi * xi
self.wb[0] += self.eta * yi
wrongNum += 1
if wrongNum == 0:
isWrong = False
训练
ppt = Perceptrons()
ppt.fit(X,y)
ppt.wb
画图
xPoint = np.linspace(4,7,10)
yPoint = -(ppt.wb[0] + ppt.wb[1]*xPoint)/ppt.wb[2]
plt.scatter(data[idx1,0],data[idx1,1],c='b',marker='o')
plt.scatter(data[idx2,0],data[idx2,1],c='orange',marker='*')
plt.plot (xPoint,yPoint)
plt.show()
sklearn调用感知机
from sklearn.linear_model import Perceptron
ppt = Perceptron(fit_intercept=True,max_iter=1000,shuffle=True) #fit_intercept优化偏置b,shuffle每次迭代后洗牌,
ppt.fit(X,y)
#权值向量
ppt.coef_
#偏置
ppt.intercept_
统计学习方法(第二章)--感知器(python实现以及sklearn调用)相关教程
电商项目——商城业务-商品上架——第二章——中篇
电商项目——商城业务-商品上架——第二章——中篇 电商项目——全文检索-ElasticSearch——第一章——中篇 电商项目——商城业务-商品上架——第二章——中篇 文章目录 1:sku在es中的存储模型分析 2:nested数据类型场景 3:构造基本数据 4:构造sku检索属
2020-10-28 R语言统计与基础
2020-10-28 R语言统计与基础 Rstudio 比 R Gui 界面更友好,更适合新手使用 Rstudio界面介绍 Console 是一个命令行的窗口(运行的窗口),上方展开是 R 运行的脚本的窗口,在里面可以写很多命令 右上角是环境变量和历史的窗口 右下角,Plot 窗口是绘制图片的
laravel-admin统计图表chartjs柱状图显示格式问题
laravel-admin统计图表chartjs柱状图显示格式问题 一个坑掉进两次,还是记录一下比较稳妥。。。 chartjs.blade.php canvas id=myChart1 width=400 height=200/canvasscript $(function () { var ctx = document.getElementById(myChart1).getContext('2d'); v
如何精确统计页面停留时长
如何精确统计页面停留时长 1.背景 页面停留时间(Time on Page)简称 Tp,是网站分析中很常见的一个指标,用于反映用户在某些页面上停留时间的长短,传统的Tp统计方法会存在一定的统计盲区,比如无法监控单页应用,没有考虑用户切换Tab、最小化窗口等操作场景
mysql 怎样统计分组数
mysql统计分组数的方法:1、统计总记录数【SELECT count(*) FROM 表名 WHERE 条件】;2、统计每组的记录条数【SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id】。 mysql统计分组数的方法: SELECT count(*) FROM 表名 WHERE 条件 这样查出来的是总记录数
2020-10-27
2020-10-27 人流量统计2区域划分 # -*- coding: utf-8 -*-# !/usr/bin/env pythonimport urllibimport base64import jsonimport timefrom flask import Flask 你的 APPID AK SK APP_ID = '20096368'API_KEY = 'AMVkPEj7MgKWHdglLjoYj1EL'SECRET_KEY = 'Nuhozg
2020-10-27
2020-10-27 人流量统计5—人流轨迹记录 from collections import dequeimport numpy as np#import imutilsimport cv2import time#设定红色阈值,HSV空间redLower = np.array([170, 100, 100])redUpper = np.array([179, 255, 255])#初始化追踪点的列表mybuffe
JAVA编程实战:礼金统计软件
JAVA编程实战:礼金统计软件 程序界面 界面初始化 //初始化顶部面板 jp1 = new JPanel(); jp1.setLayout(null); jp1.setBounds(0, 0, frame.getWidth(), 300); jp1.setBackground(new Color(187, 255, 255)); JLabel jl1 = new JLabel(宴席嘉宾贺礼统计); jl1