1. 程式人生 > >基於R中的神經網路包(nnet)做分類(高階篇)

基於R中的神經網路包(nnet)做分類(高階篇)

針對UCI的seeds資料集,基於R中的神經網路包(nnet)做分類,並計算分類的測試誤差。

分類是一種有監督的學習任務,我們需要一些帶有標籤屬性的資料和我們需要預測的新資料。
舉例說明,垃圾郵件識別問題,可以理解為一個二分類問題,即識別一封郵件是否是垃圾郵件並作出相應的處理。我們解決分類問題,通常的思路是原始資料集劃分為訓練集和測試集,利用訓練集來訓練一個分類模型集合,然後利用測試來選擇最優模型,最後利用模型識別或者判斷新的郵件是否是垃圾郵件。
分類的方法很豐富,每一種分類方法有著各自的優劣和應用場景。本文利用神經網路分類方法來對資料集進行分類。
我所採用的資料集是公開資料集seeds,可以直接在網上下載,網址是:http://archive.ics.uci.edu/ml/datasets/seeds#。

seeds資料集描述如表1所示。


表1 seeds 資料集概況
由上表可知,seed資料集有7個實數屬性和1個類別屬性,該資料集可以用於來做分類或者聚類分析與驗證。
R中做神經網路演算法的包是nnet包。
第一步:匯入原始資料集seeds
seeds <-read.table("D:/DMinR/nnet/seeds.txt", header=FALSE, sep="")
第二步:給資料集中變數重新命名,依次是面積、周長、緊湊率、核長度、核寬度、不對稱係數、核心槽長度和類別,依次命名為:A, P, C , L, W, AC, LKG,Label
names(seeds) <-c("A", "P", "C", "L", "W","AC", "LKG", "Label")
第三步:把seed資料集劃分為訓練70%的訓練資料集和30%的測試資料集
#獲取各自的索引號
trainIndex <-sample(1:210, 147)
trainIndex
testIndex <-setdiff(1:210, trainIndex)
testIndex
第四步:利用神經網路對訓練資料集獲得模型
library(nnet)
ideal <-class.ind(seeds$Label)
seedsANN <-nnet(seeds[trainIndex, -8], ideal[trainIndex, ], size=10, softmax=TRUE)
第五步:對測試資料及進行測試
testLabel <-predict(seedsANN, seeds[testIndex, -8], type="class")
#第六步:計算測試誤差率
my_table <-table(seeds[testIndex,]$Label, testLabel)
test_error <-1 -sum(diag(my_table)) / sum(my_table)
test_error
測試誤差為:0.0476,即4.76%。

相關推薦

基於R神經網路nnet分類(高階)

針對UCI的seeds資料集,基於R中的神經網路包(nnet)做分類,並計算分類的測試誤差。 分類是一種有監督的學習任務,我們需要一些帶有標籤屬性的資料和我們需要預測的新資料。 舉例說明,垃圾郵件識別問題,可以理解為一個二分類問題,即識別一封郵件是否是垃圾郵件並作出相應的處

迴圈神經網路系列基於LSTM的MNIST手寫體識別

我們知道迴圈神經網路是用來處理包含序列化資料的相關問題,所有若要利用迴圈神經網路來解決某類問題,那麼首先要做的就是將原始資料集序列化,然後處理成某個深度學習框架所接受的資料輸入格式(比如Tensorflow). 1.資料預處理 我們知道MNIST資料集中的每張圖片形

迴圈神經網路系列TensorflowMultiRNNCell

迴圈神經網路系列(一) Tensorflow中BasicRNNCell 迴圈神經網路系列(二)Tensorflow中dynamic_rnn 經過前面兩篇博文,我們介紹瞭如何定義一個RNN單元,以及用dynamic_rnn來對其在時間維度(橫軸)上展開。我們今天要介紹的就是如何疊加多層

迴圈神經網路系列Tensorflowdynamic_rnn

1.回顧 上一篇博文(迴圈神經網路系列(一)Tensorflow中BasicRNNCell)中我們介紹了在Tensoflow中,每個RNN單元的實現,以及對應各個引數的含義。自那之後,我們就能通過Tensorflow實現一個單元的計算了。 import tensorflow as

迴圈神經網路系列TensorflowBasicRNNCell

按道理看完RNN的原理之後,我們就應該來用某種框架來實現了。可偏偏在RNN的實現上,對於一個初學者來說Tensorflow的表達總是顯得那麼生澀難懂,比起CNN那確實是差了一點。比如裡面的引數就顯示不是那麼的友好。num_units到底指啥?原諒我最開始以為指的是RNN單元的個數。zer

迴圈神經網路系列TensorflowConvLSTMCell

前面一文我們簡單得介紹了ConvLSTM得原理和應用場景,現在來看看在Tensorflow它具體是如何實現得。 值得一說得是Tensorflow在實現這個演算法得時候並沒有使用peepholes,即下面的紅色部分,而是基於原始的LSTM網路結構改變的。不過在最後,我也會給出一個仿照

迴圈神經網路系列基於LSTM的唐詩生成

1. 思路 這個示例在很多地方都出現過,對於學習理解LSTM的原理極有幫助,因此我們下面就來一步一步地弄清楚其中的奧祕所在! 對於迴圈神經網路來說,我們首先需要做的仍舊是找到一種將資料序列化的方法。當然,對於古詩詞來說,每個字的出現順序就是天然的一個序列,因此我們就可以直接

迴圈神經網路系列TensorflowBasicLSTMCell

1.結論 照慣例,先上結論,再說過程,不想看過程的可直接略過。 從這個圖我們可以知道,一個LSTM cell中有4個引數,並且形狀都是一樣的shape=[output_size+n,output_size],其中n表示輸入張量的維度,output_size

誰擋了我的神經網路—— 如何在訓練得到更好的結果

誰擋了我的神經網路?(一)—— 如何在訓練中得到更好的結果 博主最近在嘗試訓練自己新設計的神經網路,但是網路收斂到的損失並不讓人滿意。於是,博主決定在這裡記錄下在嘗試讓網路收斂得更好的過程中,成功與失敗的經驗(包括實驗)。這一系列會隨著博主研究的不斷深入,有選擇地更新。本文更新於20

神經網路優化 - 滑動平均

1 滑動平均概述 滑動平均(也稱為 影子值 ):記錄了每一個引數一段時間內過往值的平均,增加了模型的泛化性。 滑動平均通常針對所有引數進行優化:W 和 b, 簡單地理解,滑動平均像是給引數加了一個影子,引數變化,影子緩慢追隨。 滑動平均的表示公式為 影子 = 衰減率 * 影子 + ( 1 - 衰減率

神經網路優化 - 搭建神經網路八股

為提高程式的可複用性,搭建模組化的神經網路八股 1 前向傳播 前向傳播就是設計、搭建從輸入(引數 x ) 到輸出(返回值為預測或分類結果 y )的完整網路結構,實現前向傳播過程,一般將其放在 forward.py 檔案中 前向傳播需要定義三個函式(實際上第一個函式是框架,第二、三個函式是賦初值過程)

誰擋了我的神經網路—— 啟用函式

誰擋了我的神經網路?(三)—— 啟用函式 這一系列文章介紹了在神經網路的設計和訓練過程中,可能提升網路效果的一些小技巧。前文介紹了在訓練過程中的一系列經驗,這篇文章將重點關注其中的啟用函式部分。更新於2018.11.1。 文章目錄 誰擋了我的神經網路?(三)

誰擋了我的神經網路—— 優化演算法

誰擋了我的神經網路?(二)—— 優化演算法 這一系列文章介紹了在神經網路的設計和訓練過程中,可能提升網路效果的一些小技巧。前文介紹了在訓練過程中的一系列經驗,這篇文章將重點關注其中的優化演算法部分。更新於2018.11.1。 文章目錄 誰擋了我的神經網路?(

卷積神經網路理解:濾波器的意義

歡迎大家關注我們的網站和系列教程:http://www.tensorflownews.com/,學習更多的機器學習、深度學習的知識! 荔枝boy 卷積神經網路的發展 卷積神經網路的重要性 卷積神經網路與影象識別 濾波器 一.卷積神經網路的發展

對抗神經網路學習——WGAN+爬蟲生成皮卡丘影象(tensorflow實現)

一、背景 WGAN的全稱為Wasserstein GAN, 是Martin Arjovsky等人於17年1月份提出的一個模型,該文章可以參考[1]。WGAN針對GAN存在的問題進行了有針對性的改進,但WGAN幾乎沒有改變GAN的結構,只是改變了啟用函式和loss函式,以及擷取權重,卻得到了非常好

神經網路學習4————自組織特徵對映神經網路SOM以及python實現

一、自組織競爭學習神經網路模型(無監督學習) (一)競爭神經網路   在競爭神經網路中,一層是輸入層,一層輸出層,輸出層又稱為競爭層或者核心層。在一次輸入中,權值是隨機給定的,在競爭層每個神經元獲勝的概率相同,但是最後會有一個興奮最強的神經元。興奮最強的神經元戰勝了其他神

神經網路學習3————BP神經網路以及python實現

一、BP神經網路結構模型                BP演算法的基本思想是,學習過程由訊號的正向傳播和誤差的反向傳播倆個過程組成,輸入從輸入層輸入,經隱層處理以後,傳向輸出層。如果輸出層的實際輸出和期望輸出不符合

神經網路學習2————線性神經網路以及python實現

一、線性神經網路結構模型 在結構上與感知器非常相似,只是神經元啟用函式不同,結構如圖所示: 若網路中包含多個神經元節點,就可形成多個輸出,這種神經網路可以用一種間接的方式解決線性不可分的問題,方法是用多個線性含糊對區域進行劃分,神經結構和解決異或問題如圖所示:  &nbs

神經網路總結tensorflow

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #匯入mnist資料集minst=input_data.read_data_sets('MNIST_data',one_hot=T

深度卷積神經網路學習

卷積神經網路的基礎模組為卷激流包括卷積(用於維數拓展)、非線性(洗屬性、飽和、側抑制)、池化(空間或特徵型別的聚合)和批量歸一化(優化操作,目的是為了加快訓練過程中的收斂速度,同事避免陷入區域性最優)等四種操作。下面簡單介紹這四種操作。 1、卷積:利用卷積核對輸入影象進行處