python平均分统计教程第二版答案,统计学习方法(第二章)--感知器(python实现以及sklearn调用)...

本文介绍了感知器模型,它是一个线性二分类模型,通过找到一个分离超平面来区分数据。损失函数是误分类点到超平面的距离,通过随机梯度下降法进行优化。文章提供了Python实现感知器的步骤,并展示了sklearn库中Perceptron类的使用方法。通过实例数据集展示了模型训练和预测的过程,最后讨论了如何利用sklearn调用感知器模型。
摘要由CSDN通过智能技术生成

统计学习方法(第二章)--感知器(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()

381b6b066331dafdb908a2d1af36b340.png

选取数据及画图

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()

fda9c6d3851205ac5a5a138e727e2839.png

定义感知机

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

c82ff296bd388107449ee582a089df90.png

画图

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()

4d62e34ac2206f3aa2a8035e1add12cd.png

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_

a12a6458d955bfbfa905b2e852725a19.png

统计学习方法(第二章)--感知器(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

好的,以下是两类感知器的参数学习算法的Python实现: ```python import numpy as np class Perceptron: def __init__(self, learning_rate=0.01, max_iterations=1000): self.learning_rate = learning_rate self.max_iterations = max_iterations def fit(self, X, y): n_samples, n_features = X.shape self.weights = np.zeros(n_features) self.bias = 0 for _ in range(self.max_iterations): for i in range(n_samples): y_pred = np.dot(X[i], self.weights) + self.bias if y_pred <= 0: self.weights += self.learning_rate * y[i] * X[i] self.bias += self.learning_rate * y[i] def predict(self, X): y_pred = np.dot(X, self.weights) + self.bias return np.where(y_pred > 0, 1, -1) class Adaline: def __init__(self, learning_rate=0.01, max_iterations=1000): self.learning_rate = learning_rate self.max_iterations = max_iterations def fit(self, X, y): n_samples, n_features = X.shape self.weights = np.zeros(n_features) self.bias = 0 self.costs = [] for _ in range(self.max_iterations): y_pred = np.dot(X, self.weights) + self.bias errors = y - y_pred self.weights += self.learning_rate * np.dot(X.T, errors) self.bias += self.learning_rate * np.sum(errors) cost = np.sum((errors ** 2)) / n_samples self.costs.append(cost) def predict(self, X): y_pred = np.dot(X, self.weights) + self.bias return np.where(y_pred > 0, 1, -1) ``` 其中,Perceptron是感知器算法的实现,Adaline是自适应线性神经元算法的实现。你需要提供训练数据X和对应的标签y,并调用fit方法进行训练,然后调用predict方法进行预测。最终的输出结果是预测的标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值