機械学習 - 予備的なパーセプトロン

パーセプトロンとは

パーセプトロンとは何かを理解するには、まず生物学的ニューロン (BN) の構造を理解する必要があります。生物学的ニューロンの構造は次の図に示されています。
ここに画像の説明を挿入します

この図から、生物学的ニューロンは主に細胞体、樹状突起、軸索、シナプスの 4 つの部分で構成されていることがわかります。一定の生物学的基礎を持っている人は、ニューロンの入力端には複数の樹状突起があり、主に入力情報を受け取るために使用されることを理解できます。入力された情報はシナプスで処理され蓄積され、処理された入力情報が一定の閾値以上になると、その情報が軸索を伝わって伝わり、このときニューロンが活性化するといいます。 、処理された入力情報が閾値未満の場合、ニューロンは抑制状態にあり、他のニューロンにデータを送信しないか、またはほとんど情報データを送信しません。

生物学的ニューロンに触発されて、心理学者マカロックと数学者ピッツは 1943 年に人工ニューロン モデル (Artificial Neuron、AN) を提案しました。

ここに画像の説明を挿入します

データ紹介

我们通过判断西瓜是否成熟例子来介绍感知机的算法流程,数据介绍:

データセットは、色、ベース、ノック音など、予測に役立つ合計 30 の特徴で構成されています。カテゴリーは良いメロンと良くないメロンです。データの一部は次のとおりです。
ここに画像の説明を挿入します
このモデルは数値のみを計算できるためです。したがって、x1 で色を表し、x2 でベースを表し、x3 でノック音を表します。y はカテゴリを表します。このうち、x1= 0 は緑色、x2= 2 は少し丸まっていること、y=-1 は良くないメロンを意味します。詳細は以下のとおりです。
ここに画像の説明を挿入します

パーセプトロンアルゴリズムのプロセス

パーセプトロン モデルを適用してスイカが熟しているかどうかを分類すると、各特徴の重みと偏りを決定して判断の根拠を得ることで、次の図のように理解できます。
数学的モデルを確立します。
ここに画像の説明を挿入します

数学的モデルを確立した後、図に示すようにパーセプトロンのアルゴリズム フローを導入します。
ここに画像の説明を挿入します

テキストの説明:
ここに画像の説明を挿入します

ただし、上記の更新はトレーニング セット内の誤分類点にのみ適用されます。その理由については、誤分類点の場合は、誤分類点が正しい分類点になるように超平面を調整する必要があり、正しい分類点の場合は、調整の必要がなく、プログラム全体の動作時間を短縮できます。

パーセプトロンのPythonコード実装

根据上面的算法流程,用python代码实现,这是代码:
#encoding=utf8
import numpy as np
#构建感知机算法

class Perceptron(object):
    def __init__(self, learning_rate = 0.01, max_iter = 200):
        self.lr = learning_rate
        self.max_iter = max_iter
    def fit(self, data, label):
        '''
        input:data(ndarray):训练数据特征
              label(ndarray):训练数据标签
        output:w(ndarray):训练好的权重
               b(ndarry):训练好的偏置
        '''
        #编写感知机训练方法,w为权重,b为偏置
        self.w = np.array([1.]*data.shape[1])
        self.b = np.array([1.])
        
        for i in range(len(label)):
            while label[i]*(np.matmul(self.w,data[i])+self.b) <= 0:
                self.w = self.w + self.lr * (label[i]*data[i])
                self.b = self.b + self.lr * label[i]
       
    def predict(self, data):
        '''
        input:data(ndarray):测试数据特征
        output:predict(ndarray):预测标签
        '''
        yc = np.matmul(data,self.w) + self.b
        for i in range(len(yc)):
            if yc[i] >= 0:
                yc[i] = 1
            else:
                yc[i] = -1
        predict = yc
        return predict
代码在EduCoder平台测试得到通过,因为正确率超过0.8就可以,所以我并没有确切的知道正确率。

渡されたコードのスクリーンショット:
ここに画像の説明を挿入します

内容参考了周志华的机器学习和黄安埠的深入浅出深度学习等,感兴趣的同学也可以进入EduCoder平台的机器学习修炼指南一起学习机器学习。

おすすめ

転載: blog.csdn.net/qq_44725872/article/details/108673188