首页 > 编程语言 >肉身布莱特-感知机python实现

肉身布莱特-感知机python实现

时间:2023-05-08 17:46:35浏览次数:36  
标签:plt python self volume 感知机 布莱特 virulence np import

一、代码:做线性拟合

import numpy as np
from matplotlib import pyplot as plt
# 很简单的一个体积增大和毒气量的关系拟合
virulence = np.random.rand(100)
volume = np.random.rand(100)
virulence.sort()
volume.sort()
 
plt.scatter(volume, virulence)
 
w = 0
b = 0
alpha = 0.05
num_iterations = 1000
 
for i in range(num_iterations):
    for j in range(len(virulence)):
        x = volume[j]
        y = virulence[j]
        prediction = w * x + b
        loss = (y - prediction) ** 2 # MSE
 
        w -= alpha *-2 * x * (y - prediction) # 负梯度移动才会找到最小值
        b -= alpha * -2 * (y - prediction)
print(loss)
plt.plot(volume, volume * w + b)
plt.show()
 

二、代码:二元分类。当然也可用svm来解决

import numpy as np
 
class Perceptron:
    def __init__(self):
        self.w = None
        self.b = None
        
    def train(self, X, y, lr=0.1, epochs=10):
        """
        训练感知机模型
        
        参数:
        X -- 输入数据,一个形状为 (m, n) 的二维数组,每行表示一个样本
        y -- 标签数据,一个形状为 (m,) 的一维数组,每个元素为 1 或 -1
        lr -- 学习率,用于控制每次迭代的步长,默认为 0.1
        epochs -- 迭代次数,默认为 10
        
        返回值:
        无
        """
        m, n = X.shape
        self.w = np.zeros(n)
        self.b = 0
        
        for epoch in range(epochs):
            for i in range(m):
                xi = X[i]
                yi = y[i]
                if yi * (np.dot(xi, self.w) + self.b) <= 0:
                    self.w += lr * yi * xi
                    self.b += lr * yi
                    
    def predict(self, X):
        """
        预测数据的标签
        
        参数:
        X -- 输入数据,一个形状为 (m, n) 的二维数组,每行表示一个样本
        
        返回值:
        预测结果,一个形状为 (m,) 的一维数组,每个元素为 1 或 -1
        """
        y_pred = np.dot(X, self.w) + self.b
        y_pred = np.where(y_pred > 0, 1, -1)
        return y_pred
 
import matplotlib.pyplot as plt
import numpy as np
from test import Perceptron
 
# 创建二分类数据
X = np.array([[3, 3], [4, 3], [1, 1]])
y = np.array([1, 1, -1])
 
# 训练模型
perceptron = Perceptron()
perceptron.train(X, y)
 
# 预测结果
y_pred = perceptron.predict(X)
 
# 绘制数据和分类结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

标签:plt,python,self,volume,感知机,布莱特,virulence,np,import
From: https://www.cnblogs.com/hshsk/p/17382457.html

相关文章

  • 用Python语言进行时间序列ARIMA模型分析
    应用时间序列时间序列分析是一种重要的数据分析方法,应用广泛。以下列举了几个时间序列分析的应用场景:1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向。例如,利用历史股市数据和经济指标进行时间序列分析,可以预测未来股市的走向。2.交通拥堵预测:时间......
  • python快速直白入门(半新手向,老手复习向)
    主用python做项目有一段时间,这次简单总结学习下。为后面的项目编写,进行一次基础知识的查缺补漏、1、变量名和数据类型"""变量名,只能由"数字、大小写字母、_"组成,且不能以数字开头"""#整数int#hashable,不可变对象a=5#浮点数float#hashable,不可变对象a1=3......
  • (python) 数据库一次 Connection 连接,不同 cursor
    数据库一次Connection连接,不同cursor的最简洁代码:importpymysqlclassDatabase(object):connection=Nonedef__init__(self):ifnotDatabase.connection:Database.connection=pymysql.connect(host="127.0.0.1",......
  • Python语言进行代码换行常用的方法详解!
    在编写Python代码时,有效换行可以让代码变得更加美观,那么Python中如何进行代码换行?Python中换行的方法有很多,本文为大家介绍两种比较常用的方法,快来看看吧。Python建议每行代码的长度不超过80个字符。对于过长的代码,建议进行换行。1、在该行代码末尾加上续行符“\”,即......
  • python时间相关
    目录timedatetime参考博客timetime—Timeaccessandconversions—Python3.10.0documentationimporttime#1970-01-0100:00:00到现在经过了多少秒print(time.time())#返回一个时间元组print(time.localtime())#时间转字符串print(time.strftime('%Y-%m-%d......
  • python Django校验表单登录案例
    定义一个视图函数,用于处理登录表单的提交动作。在该视图函数中,使用request.POST.get()方法获取POST请求中提交的用户名和密码数据,具体代码如下:fromdjango.shortcutsimportrender,redirectfromdjango.contrib.authimportauthenticate,logindeflogin_view(requ......
  • python 自动化测试案例
    使用Selenium与unittest框架的自动化测试案例,可以用来模拟浏览器自动打开网站并提交表单:在下述代码中,我们定义了一个继承自unittest.TestCase的测试类TestLoginForm,其中setUp()方法在每个测试方法执行前会调用,用来启动浏览器并打开测试用网站。tearDown()方法在每个测......
  • python selenium 谷歌浏览器指定下载位置
    pythonselenium谷歌浏览器指定下载位置功能pythonselenium点击浏览器的下载按钮,然后下载到指定的目录,而非下载到默认位置代码importos.pathfromtimeimportsleepfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBy"""指定默认下载路径,......
  • Python处理文档中的文本
    提取所有Word文档中的指定部分内容,并合并到一个txt文件中:importglobimportdocxdefget_text_between_headings(doc,heading1,heading2):start=-1end=-1foriinrange(len(doc.paragraphs)):ifdoc.paragraphs[i].text==heading1:......
  • C++和Python && 和||运算符之不同点
    ......