感知机不调包代码学习笔记

感知机不调包代码学习笔记,第1张

感知机不调包代码学习笔记

使用sklearn自带的莺尾花数据

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
#导入莺尾花数据集
iris = load_iris()
df = pd.Dataframe(iris.data,columns=iris.feature_names)
df['label']=iris.target
df.columns=['sepal length','sepal width','petal length','petal width','label']
df.label.value_counts()

用图查看sepal length 和 sepal width的散点图

#画图查看概括
plt.scatter(df[:50]['sepal length'],df[:50]['sepal width'],label='0')
plt.scatter(df[50:100]['sepal length'],df[50:100]['sepal width'],label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()
plt.show()

创建一个data数据集,将需要的数据放入

data= np.array(df.iloc[:100,[0,1,-1]])  #将sepal length,sepal width,target提出来放在data中
X,y = data[:,:-1],data[:,-1]
y = np.array([1 if i == 1 else -1 for i in y]) #将0-1改为-1和1

构建模型

#感知机构建
class Model:
    #初始化变量
    def __init__(self):
        self.w = np.ones(len(data[0])-1,dtype=np.float32)
        self.b=0
        self.l_rate=0.1
    #定义下面的函数,用在梯度下降法中
    def sign(self,x,w,b):
        y=np.dot(x,w)+b #np.dot(x,y)是将x与y两个矩阵进行矩阵乘法运算
        return y
    #随机梯度下降法,使用wrong_count进行计数,如果没有分类错误的点,那么wrong_count将会等于0,退出while
    def fit(self,X_train,y_train):
        is_wrong = False
        while not is_wrong:
            wrong_count = 0
            for j in range(len(X_train)):
                X = X_train[j]
                y = y_train[j]
                if (y * self.sign(X_train,self.w,self.b)).all() <=0 :  #如果这里没有.all会报错,因为计算机不知道是有小于等于0即可,还是矩阵的任意一个值都需要小于等于0
                    self.w = self.w +self.l_rate * np.dot(y,X)
                    self.b = self.b +self.l_rate*y
                    wrong_count += 1
            if wrong_count == 0:
                is_wrong = True
        return 'Perceptron Model!'
    def score(self):
        pass

用莺尾花数据拟合

#用model拟合莺尾花数据
perceptron = Model()
perceptron.fit(X,y)
perceptron.w
perceptron.b

代码参考:

https://github.com/wzyonggege/statistical-learning-method

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5571926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存