欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

自適應(yīng)線性神經(jīng)網(wǎng)絡(luò)Adaline的python實(shí)現(xiàn)詳解

 更新時(shí)間:2019年09月30日 09:06:32   作者:沙克的世界  
這篇文章主要介紹了自適應(yīng)線性神經(jīng)網(wǎng)絡(luò)Adaline的python實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

自適應(yīng)線性神經(jīng)網(wǎng)絡(luò)Adaptive linear network, 是神經(jīng)網(wǎng)絡(luò)的入門級別網(wǎng)絡(luò)。

相對于感知器,采用了f(z)=z的激活函數(shù),屬于連續(xù)函數(shù)。

代價(jià)函數(shù)為LMS函數(shù),最小均方算法,Least mean square。

實(shí)現(xiàn)上,采用隨機(jī)梯度下降,由于更新的隨機(jī)性,運(yùn)行多次結(jié)果是不同的。

'''
Adaline classifier

created on 2019.9.14
author: vince
'''
import pandas 
import math
import numpy 
import logging
import random
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

'''
Adaline classifier

Attributes
w: ld-array = weights after training
l: list = number of misclassification during each iteration 
'''
class Adaline:
  def __init__(self, eta = 0.001, iter_num = 500, batch_size = 1):
    '''
    eta: float = learning rate (between 0.0 and 1.0).
    iter_num: int = iteration over the training dataset.
    batch_size: int = gradient descent batch number, 
      if batch_size == 1, used SGD; 
      if batch_size == 0, use BGD; 
      else MBGD;
    '''

    self.eta = eta;
    self.iter_num = iter_num;
    self.batch_size = batch_size;

  def train(self, X, Y):
    '''
    train training data.
    X:{array-like}, shape=[n_samples, n_features] = Training vectors, 
      where n_samples is the number of training samples and 
      n_features is the number of features.
    Y:{array-like}, share=[n_samples] = traget values.
    '''
    self.w = numpy.zeros(1 + X.shape[1]);
    self.l = numpy.zeros(self.iter_num);
    for iter_index in range(self.iter_num):
      for rand_time in range(X.shape[0]): 
        sample_index = random.randint(0, X.shape[0] - 1);
        if (self.activation(X[sample_index]) == Y[sample_index]):
          continue;
        output = self.net_input(X[sample_index]);
        errors = Y[sample_index] - output;
        self.w[0] += self.eta * errors;
        self.w[1:] += self.eta * numpy.dot(errors, X[sample_index]);
        break;
      for sample_index in range(X.shape[0]): 
        self.l[iter_index] += (Y[sample_index] - self.net_input(X[sample_index])) ** 2 * 0.5;
      logging.info("iter %s: w0(%s), w1(%s), w2(%s), l(%s)" %
          (iter_index, self.w[0], self.w[1], self.w[2], self.l[iter_index]));
      if iter_index > 1 and math.fabs(self.l[iter_index - 1] - self.l[iter_index]) < 0.0001: 
        break;

  def activation(self, x):
    return numpy.where(self.net_input(x) >= 0.0 , 1 , -1);

  def net_input(self, x): 
    return numpy.dot(x, self.w[1:]) + self.w[0];

  def predict(self, x):
    return self.activation(x);

def main():
  logging.basicConfig(level = logging.INFO,
      format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
      datefmt = '%a, %d %b %Y %H:%M:%S');

  iris = load_iris();

  features = iris.data[:99, [0, 2]];
  # normalization
  features_std = numpy.copy(features);
  for i in range(features.shape[1]):
    features_std[:, i] = (features_std[:, i] - features[:, i].mean()) / features[:, i].std();

  labels = numpy.where(iris.target[:99] == 0, -1, 1);

  # 2/3 data from training, 1/3 data for testing
  train_features, test_features, train_labels, test_labels = train_test_split(
      features_std, labels, test_size = 0.33, random_state = 23323);
  
  logging.info("train set shape:%s" % (str(train_features.shape)));

  classifier = Adaline();

  classifier.train(train_features, train_labels);
    
  test_predict = numpy.array([]);
  for feature in test_features:
    predict_label = classifier.predict(feature);
    test_predict = numpy.append(test_predict, predict_label);

  score = accuracy_score(test_labels, test_predict);
  logging.info("The accruacy score is: %s "% (str(score)));

  #plot
  x_min, x_max = train_features[:, 0].min() - 1, train_features[:, 0].max() + 1;
  y_min, y_max = train_features[:, 1].min() - 1, train_features[:, 1].max() + 1;
  plt.xlim(x_min, x_max);
  plt.ylim(y_min, y_max);
  plt.xlabel("width");
  plt.ylabel("heigt");

  plt.scatter(train_features[:, 0], train_features[:, 1], c = train_labels, marker = 'o', s = 10);

  k = - classifier.w[1] / classifier.w[2];
  d = - classifier.w[0] / classifier.w[2];

  plt.plot([x_min, x_max], [k * x_min + d, k * x_max + d], "go-");

  plt.show();
  

if __name__ == "__main__":
  main();

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)讀取txt文件并轉(zhuǎn)換為excel的方法示例

    Python實(shí)現(xiàn)讀取txt文件并轉(zhuǎn)換為excel的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)讀取txt文件并轉(zhuǎn)換為excel的方法,涉及Python針對txt文件的讀取及Excel格式文件生成相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 從局部變量和全局變量開始全面解析Python中變量的作用域

    從局部變量和全局變量開始全面解析Python中變量的作用域

    無論是以類為基礎(chǔ)的面相對象編程,還是單純函數(shù)內(nèi)部變量的定義,變量的作用域始終是Python學(xué)習(xí)中一個必須理解掌握的環(huán)節(jié),下面我們從局部變量和全局變量開始全面解析Python中變量的作用域,需要的朋友可以參考下
    2016-06-06
  • 利用Python判斷文件的幾種方法及其優(yōu)劣對比

    利用Python判斷文件的幾種方法及其優(yōu)劣對比

    任何的編程語言都離不開文件操作,文件操作主要是幫助我們更好的創(chuàng)建打開文件,讀取文件中的內(nèi)容、或是把我們想要保存的內(nèi)容寫入文件中、或是管理文件目錄等等,下面這篇文章主要給大家介紹了關(guān)于利用Python判斷文件的幾種方法及其優(yōu)劣對比的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Flask入門之上傳文件到服務(wù)器的方法示例

    Flask入門之上傳文件到服務(wù)器的方法示例

    這篇文章主要介紹了Flask入門之上傳文件到服務(wù)器的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python技能樹共建之python?urllib?模塊

    Python技能樹共建之python?urllib?模塊

    這篇文章介紹了Python技能樹共建之python?urllib?模塊,urllib模塊是?Python?標(biāo)準(zhǔn)庫,更多相關(guān)介紹需要的小伙伴可以參考下面文章的詳細(xì)內(nèi)容
    2022-05-05
  • 簡單了解python列表和元組的區(qū)別

    簡單了解python列表和元組的區(qū)別

    這篇文章主要介紹了簡單了解python列表和元組的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 探究Python多進(jìn)程編程下線程之間變量的共享問題

    探究Python多進(jìn)程編程下線程之間變量的共享問題

    這篇文章主要介紹了探究Python多進(jìn)程編程下線程之間變量的共享問題,多進(jìn)程編程是Python學(xué)習(xí)進(jìn)階中的重要知識,需要的朋友可以參考下
    2015-05-05
  • 基于Python采集爬取微信公眾號歷史數(shù)據(jù)

    基于Python采集爬取微信公眾號歷史數(shù)據(jù)

    這篇文章主要介紹了基于Python采集爬取微信公眾號歷史數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python實(shí)現(xiàn)磁盤日志清理的示例

    python實(shí)現(xiàn)磁盤日志清理的示例

    這篇文章主要介紹了python實(shí)現(xiàn)磁盤日志清理的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Python3 列表,數(shù)組,矩陣的相互轉(zhuǎn)換的方法示例

    Python3 列表,數(shù)組,矩陣的相互轉(zhuǎn)換的方法示例

    這篇文章主要介紹了Python3 列表,數(shù)組,矩陣的相互轉(zhuǎn)換的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論