RSNNS - 1.Introduction

Neural Networks in R Using the Stuttgart Neural Network Simulator: RSNNS

Christoph Bergmeir
University of Granada
Jose M. Ben itez
University of Granada

출처: Journal of Statistical Software
January 2012, Volume 46, Issue 7. https://www.jstatsoft.org/index
원본: PDF


개요 (Abstract)
신경망(Neural networks)은 분류 및 회귀에서 중요한 표준 기계학습 프로시저이다. 우리는 유명한 Stuttgart Neural Network Simulator SNNS에 편리한 인터페이스를 제공하는 R 패키지 RSNNS를 설명한다. 주요 특징은 (a) C++ 클래스에 연관된 SNNS 부분의 갭슐화 이다, 다른 망(networks)의 연속적이고 병렬적인 사용, (b) 저-수준 인터페이스를 사용하여 R에서 모든 SNNS 알고리즘 기능을 접근, 그리고 (c) 편리한 고-수준 인퍼페이스, 많은 표준 신경 망 프로시저의 R-형식 사용. 패키지는 또한 모델의 시각화와 분석 그리고 훈련 절차(procedures)를 위한 함수를 소개한다, 뿐만 아니라 원본 SNNS 파일 형식으로 데이터 입출력을 위한 함수.
Keywords: neural networks, SNNS, R, RSNNS.

1 소개(Introduction)

이 논문은 R (R Development Core Team 2011) 인터페이스가 Stuttgart Neural Network Simulator (SNNS, Zell et al. 1998)를 수행하는 패키지 RSNNS (Bergmeir and Ben tez 2012)를 설명한다. RSNNS는 여전히 신경망 모델 생성, 훈련, 그리고 검증에서 포괄적인 어플리케이션이다. 오늘날 그것은 가장 완벽하고, 가장 신뢰하고, 그리고 신경망 표준 프로시저를 빠르게 구현한다. RSNNS의 주요 이점은, 그것은 R의 일반적인 포괄적으로 신경망 패키기를 표현. (a) SNNS 커널의 기능과 유연성은 R에서 제공된다. (b) 가장 일반적인 작업에서 편리한 인터페이스를 제공, 그래서 SNNS의 메소드는 R로 단순하게 통합된다, 특히 R의 스크립팅(scripting), 자동화(automation), 그리고 병렬 처리 능력(parallelization capabilities)을 가짐. 마지막으로, (c) 훈련의 시각화 및 분석 그리고 망의 검증을 위한 향상된 도구(enhanced tools)를 제공한다.
RSNNS는 Comprehensive R Archive Network (CRAN)의 http://CRAN.R-project.org/package=RSNNS에서 접근할 수 있다. 게다가, 다른 추상 수준에서 전체적인 사용 예제 그리고 더 많은 정보를 가지는 웹 페이지는 http://sci2s.ugr.es/dicits/software/RSNNS에서 이용 가능하다.
이 논문은 다음과 같이 구성되어 있다. Section 2는 SNNS 소프트웨어의 주요 특징을 설명한다, 신경망의 일반적인 소개 그리고 원본 간행물에 대한 언급을 같이 함. Section 3는 일반적인 소프트웨어 구조와 패키지의 상세한 구현을 설명한다. Section 4는 패키지의 고-수준 인터페이스를 설명한다. Section 5는 포함된 단순한 데이터셋의 개요를 제공하고, 그리고 Section 6은 패키지 사용을 위한 약간의 예제를 보여준다. Section 7에서는 패지지가 가지는 패키지와 R에서 접근가능한 해결책을 비교한다, 그리고 강점과 제약을 논의한다. 마지막으로, Section 8은 이 논문에 결론이다.

2. 원본 RSNNS 소프트웨어의 특징(Features of the original SNNS software)

SNNS는 3개의 주요 요소로 구성된다: 시뮬레이션 커널(simulation kernel), 그래픽 유저 인터페이스(graphical user interface: GUI), 그리고 명령어 도구의 집합. 그것을 C로 유닉스(Unix)에서 작성 되었다 그리고 GUI는 X11.Windows 포트를 사용한다. SNNS는 슈트가르트 대학에서 개발 되었다 그리고 Tubingen 대학에서 지금 관리 된다. 저자가 새로운 기능을 추가한 경우 마지막 버전은 1998년에 배포된 버전 4.2 이다. 2008년에, 버전 4.3이 배포 되었다, 주로 파이선 래핑(Python wrapping)을 추가하는 커뮤니티(http://developer.berlios.de/projects/snns-dev/)의 기어로 약간의 패치를 포함. 게다다, 이 버전에서 라이센스 변경은 더 제한적으로 수행되었다, Library General Public License (LGPL)의 아카데믹 라이센스.
우리 지식의 SNNS에서 최고는 가장 높은 수의 모델을 지원하는 신경망 소프트웨어이다. 신경망 타입으로 구현된 것은 그들의 동작, 그들의 구조, 그리고 그들의 학습 타입의 방법에서 상당히 다르다. 일반적인 신경망의 포괄적인 소개의 제공 또는 방법론의 이론을 상세한 설명은 이 논문의 범위를 넘어 섬으로, 우리는 아래에서 SNNS를 설명하는 방법의 간략한 개요를 제공한다, 원본 논문을 같이 언급함. 신경망의 다양한 소개가 있다, 관심있는 독자를 위해 언금, e.g., Rojas (1996)는 SNNS에서 구현된 많은 신경망을 다룬다. Haykin (1999) 와 Bishop (2003)는 또한 포괄적인 소개를 제공한다, 그리고 Ripley (2007)는 통계적인 관점에서 좋은 소개를 제공한다.
SNNS에서 구현된 망 구조는 다음을 포함한다, 다층 퍼셉트론(multi-layer perceptrons, MLP, Rosenblatt 1958), recurrent Elman-, and Jordan networks (Elman 1990; Jordan 1986), 방사 기저 함수 네트워크 (radial basis function networks: RBF, Poggio and Girosi 1989), RBF with dynamic decay adjustment (Berthold and Diamond 1995; Hudak 1993), Hopfield networks (Hopfield 1982), time-delay neural networks (Lang et al. 1990), self-organizing maps (SOM), associative memories, learning vector quantization networks (LVQ, Kohonen 1988), and different types of adaptive resonance theory networks (ART, Grossberg 1988), namely ART1 (Carpenter and Grossberg 1987b), ART2 (Carpenter and Grossberg 1987a), and ARTMAP (Carpenter et al. 1991) nets. 그것은 다양한 초기화, 학습, 업데이트, 활성(activation), 그리고 전체적으로 270 보다 더 많이 추가되는 가지치기 함수를 구현한다. 예를 들어, 업데이트 함수는 직열(serial), 랜덤화(randomized), 위상 순서(topologically ordered), 또는 작업 유닛의 동기 갱신(synchronous update of the units)을 허용한다. 적응 반향 이론 망(adaptive resonance theory networks)은 그들이 안정화 상태에 도달할 때 까지 단계별 또는 직접 훈련될 수 있다. 학습 함수는 표준 역전파(backpropagation), 모멘텀 조건의 역전파(backpropagation with momentum term), backpropagation through time (BPTT, Rumelhart et al. 1986), Quickprop (Fahlman 1988), resilient backpropagation (Riedmiller and Braun 1993; Riedmiller 1994), backpercolation (Jurik 1994), (recurrent) cascade-correlation (Fahlman and Lebiere 1990; Fahlman 1991), counterpropagation (Hecht-Nielsen 1987), scaled conjugate gradient (M ller 1993), and TACOMA learning (Lange et al. 1994) 를 포함한다. 활성화 함수는 신경망에서 일반적인 많은 활성 함수를 포함한다, such as different step functions, the logistic and tanh functions, the linear function, the softmax function, 등. 구현된 가지치기 함수의 예는 최적 뇌 손상 (optimal brain damage: OBD, Cun et al. 1990) 이다. 그들의 변수 설명을 가지는 모든 기능의 포괄적인 개요를 위해, 뿐만 아니라 약간의 이론적인 기반, 우리는 Zell et al. (1998), 그리고 Zell (1994)를 언급한다.
GUI는 쉬운 개발 툴 그리고 정밀한 위상 제어(precise control of topologies), 학습 및 분석 절차를 위해 제공된다. 마지막으로, 약간의 추가적인 기능은 예제에서 망(networks) 생성, 망(networks)을 표준 C 코드로 변환, 또는 어떤 분석 작업 수행을 위한 명령어 집합으로 흩어져 있다.

3. 패키지 구조 및 구현 상세
(Package architecture and implementation details)

RSNNSSNNS 어플리케이션의 중요 부분에 편리한 접근을 제공한다. 이것을 위해, SNNS 커널과 그리고 망 생성을 위한 GUI 코드의 일부(Section 3.1을 보라)는 C++로 이식 되었고 그리고 하나의 주요 클래스에 쌓여 있다. 모든 코드는 라이브러리에 포함 된다, RSNNS에 적재 됨. 우리는 이것을 이 문서와 소프트웨어 전반에 걸처 SNNS SnnsCLib의 복제(fork, 현재 실행중인 프로세스의 이미지 복사)하여 호출한다. R 내부에서 SnnsCLib 기능에 접근하도록 만들기 위해, 패키지 Rcpp (Eddelbuettel and Fran cois 2011)가 사용 된다. SnnsCLib 클래스는 R에서 S4 클래스와 동등하다, SnnsR이라 불림: 패키지의 저수준 인터페이스. SnnsR은 직접 커널 API에(SNNS 내부에서 "krui"로 불림) 접근하기 위해 사용되므로, 모든 기능 및 SNNS 커널의 유연한 이점을 가질 수 있다. 그러나, 그것은 직접 C++ 함수와 연결되므로, 그것의 사용은 비직관적으로 보이고 그리고 R 프로그래머에게 노력이 수반되게 한다. 그러므로 고수준 R 인터페이스는 그것의 하위 클래스인 S3 클래스 rsnns 으로 표현 된다. 이 인터페이스는 직관적으로 제공 된다, 사용을 쉽게 함, 그리고 여전히 상당히 유연한 인터페이스 그러므로 가장 일반적인 네트워트 위상(network topologies)과 학습 알고리즘은 R로 원활하게 통합 된다. 모든 이러한 콤포넌트는 이 절에서 상세히 설명 된다.

3.1. The SNNS fork SnnsCLib

SNNS는 순수한 C 코드로 작성 되었다. 그것은 단지 프로그램의 전역 상태로 표현 되어지는 한번에 하나의 신경 망을 다룰 수 있다. 그것을 C++로 이행과 그것을 클래스로 싸아서 다양한 인스턴스는 연속적 또는 병렬로 사용할 수 있는 이점을 가진다. SnnsCLib의 코드 기본은 역-적용된 Python 패치를 가지는 SNNS 버전 4.3 이다. SNNS 커널의 모든 코드와 다른 구조("bignet" 툴로 알려진 SNNS의 내부에서)의 망(networks)을 생성하기 위하여 GUI에서 가져온 약간의 코드는 패키지의 src 폴더에 복사 되었다. SNNS는 .h의 파일 이름 확장자를 가지는 해더 파일을 가진다, 퍼블릭 함수 정의를 포함, 그리고 .ph의 파일 이름 확장자를 가지는 다른 것들, 프라이빗 헤더. 이것들을 하나의 .h 파일로 통합 되었다. 바디 파일 확장자(body le extensions) 는 .c에서 .cpp로 다시 명명 되었다. 모든 코드는 하나의 C++ 클래스로 캡슐화 되므로, 관리되는 .h 파일은 SnnsCLib 클래스 정의의 프라이빗 부분에 (#include를 가지고) 포함된다. 이런 절차는 원본 코드에서 연관되는 몇 가지만 변경되는 이점을 가진다: 헤더 파일에서, 변경은 주로 static 키워드를 제거를 포함하고 그리고 SnnsCLib의 생성자로 변수 초기화의 이동. 이런 변수들은 0으로 자동으로 더 이상 초기화 하지 않으므로, 이런 타입의 모든 변수에서 변수 초기화가 추가되었다. 바디 파일에서, (a) SNNS 내부 포함은 SnnsCLib.h를 포함(include)으로 대체될 수 있다, (b) 함수 내부의 static 변수는 SnnsCLib의 멤버 변수로 바뀌었다, (c) 모든 함수 정의는 SnnsCLib의 멤버 함수 정의로 변경되었다, 그리고 (d) 함수 테이블의 호출은 this 포인터와 그리고 C++ 스타일 함수 포인터를 사용하여 지금은 수행된다.

3.2. The R low-level interface class and C++ wrapping

R에서 SnnsCLib 기능을 사용하기 위해 우리는 Rcpp를 적용했다. SnnsCLib의 모든 함수는 상응하는 래퍼(wrapper) 함수를 가진다, e.g., 현재의 학습 함수 setLearnFunc를 설정하기 위한 함수의 래퍼는 아래로 수행된다:
RcppExport SEXP SnnsCLib__setLearnFunc( SEXP xp, SEXP learning_func ) {
    Rcpp::XPtr<SnnsCLib> snnsCLib( xp );
    
    std::string p1 = Rcpp::as<std::string>( learning_func );
    
    int err = snnsCLib->krui_setLearnFunc( const_cast<char*>( p1.c_str() ) );
    return Rcpp::List::create( Rcpp::Named( "err" ) = err );
}
현재 SnnsCLib 객체의 포인터는 함수가 첫번째 변수로 표현하는 것이 전부이다. 다른 변수는 변경되고 그리고 상응하는 SNNS 함수에 전달된다. 이 예에서, 유일한 변수 learning_func에 현재 학습 함수로 설정하기 위해 함수 이름을 준다. 래퍼 함수의 결과는 전형적으로 명명된 목록(named list)이다. 만약 err를 위한 반환 값이 표현되면, 그러면 에러 처리가 수행된다(아래를 보라).
R에서 SnnsCLib의 상응하는 부분은 S4 클래스 SnnsR 이다. 각 SnnsR 객체는 그것의 상응하는 SnnsCLib 객체의 외부 포인터를 가진다. 만약 객체 팩토리를 사용하면, SnnsCLib 객체는 자동으로 생성되고 그리고 포인터는 이 객체를 가지고 초기화 된다:
snnsObject <- SnnsRObjectFactory()
SnnsRRcpp에서 제공되는 호출 매커니즘를 기반으로 그것의 인스턴스의 멤버 함수를 위한 편리한 호출 메커니즘을 함유한다. $ 연산자는 오버로드(overload) 되었다 그리고 아래의 예로 설명되는 호출 함수를 위해 사용할 수 있다.
snnsObject$setLearnFunc("Quickprop")
$ 연산자는 첫번째로 이름 SnnsR__setLearnFunc을 가지는 R 함수를 찾는다. 만약 그런 함수가 존재하지 않는다면, R의 호출 매커니즘은 아래 테이블을 상응하는 C++ 함수를 호출하기 위해 사용된다.
R class Description
mlp Multi-layer perceptron
dlvq 동적 학습 벡터 양자화 네트워크
Dynamic learning vector quantization network
rbf Radial basis function network
rbfDDA RBF network using the dynamic decay adjustment algorithm
elman Recurrent Jordan network
som Self-organizing map
art1 ART network for binary patterns
art2 ART network for real-valued patterns
artmap ART network for supervised learning of binary patterns
assoz Autoassociative memory
Table 1: R 고수준 인터페이스에서 직접 접근 가능한 모델.
SnnsCLib. 이것은 SnnsCLib의 함수는, 약간의 에러 확인 그리고 전처리, 또는 약간의 사후 처리를 수행한 후에 원래의 SnnsCLib 함수를 전형적으로 호출하여, R에서 구현된 함수로 완전히 투명하게 대체될 수 있는 이점을 가진다. 또한, 원본 SNNS에서 표현되지 않은 함수는 이 방법으로 추가할 수 있다, R에서 구현되었든 혹은 C++에서 구현되었든. 현재 수행되는 전처리는 SnnsCLib 객체의 객체 시리얼라이제이션(object serialization)을 자동으로 로딩한다, 만약 그것이 표현되지 않았다면. 이 매커니즘은 고수준 인터페이스 객체가 그들을 저장 또는 로딩을 위하여 보통의 R 메커니즘으로 저장과 적재될 수 있게 허용한다. $ 연산자로 현재 구현된 사후처리는 에러를 처리한다. 만약 리스트의 결과에서 멤버 err이 표현되고 그리고 0과 같지 않다면, 그러면 SNNS 함수 error를 호출한다, 에러 코드를 텍스트 메세지로 변환. 이 텍스트 메세지는 그러면 R 경고(warning)로 표시된다.

3.3. R high-level interface classes

RSNNS를 사용하기 위한 가장 편리한 방법은 S3 클래스 rsnns 그리고 그것의 하위 클래스로 구성된 고수준 R 인터페이스를 통해서 이다. 현재 구현된 클래스는 Table 1 에서 보여 진다.
하위 클래스는 전형적으로 5 단계의 절차로 구현된다:
  1. 입력 확인 및 전처리
  2. 객체 팩토리 rsnnsObjectFactory를 이용하여 rsnns 객체 생성, 훈련 설정, 갱신, 그리고 초기화 함수와 그들의 변수.
  3. rsnns 객체 내부에서 생성된 SnnsR 객체 함수를 직접 접근하기 위해 망 구조를 생성/적재: rsnnsObject$snnsObject$...
  4. 망 훈련, 함수 train.rsnnsnns 또는 다시 직접 접근을 이용.
  5. 출력의 사후 처리.
train.rsnns 함수는 직접적으로 rsnns 객체에서 모든 훈련 결과를 저장한다, e.g., rsnnsObject$fitted.values 으로.

4. R의 고수준 인터페이스 사용 (Using the R high-level interface)

RSNNS 패키지의 고수준 인터페이스는 가장 일반적인 신경 망 모델을 개발하고 배포하기 위한 편안한 방법을 제공한다. 이 인터페이스에서 클래스 표현은 R에서 편리한 모델 사용이 가능하다, 모델은 하나의 명령어로 생성되고, 그리고 R의 다른 모델에서 알려진 많은 표준 메서드로 표현되는 것으로, 모델에 새로운 데이터를 적용하기 위한 predict, 또는 모델의 특정을 보기 위한 print 그리고 summary.
인터페이스는 모든 모델에서 매우 비슷하다. 사용법의 예로, 우리는 다계층 퍼셉트론(multi-layer perceptron) mlp를 위한 인터페이스를 보여준다.
R> mlp(x, y, size = 5, maxit = 100, initFunc = "Randomize_Weights",
+      initFuncParams = c(-0.3, 0.3), learnFunc = "Std_Backpropagation",
+      learnFuncParams = c(0.2, 0.0), updateFunc = "Topological_Order",
+      updateFuncParams = 0.0, hiddenActFunc = "Act_Logistic",
+      shufflePatterns = TRUE, linOut = FALSE, inputsTest = NULL,
+      targetsTest = NULL)
변수는 3.3 절에서 논의된 5개의 진행 단계를 반영한다:
  • 훈련 데이터: x, y. x는 훈련 입력을 가지는 메트릭 또는 벡터이다. 만약 메소드가 감독 학습 방법(supervised learning method)이면, 또한 훈련 목표 y를 제공해야 한다.
  • 망 구조 변수(network architecture parameters): size. mlp는 하나의 구조 변수를 가진다, size, 감춰진 층(hidden layers)에서 총 뉴런(neurons) 수를 정의.
  • 반복 횟수 (Number of iterations): maxit. 변수 maxit은 반복 수를 정의한다, i.e., 훈련 수는 수행하는 기(단위) 이다.
  • 초기화 함수 (Initialization function): initFunc, initFuncParams. 초기화 함수는 망(network)의 구성 요소를 초기화 한다, i.e., 주로 유닛들 간에 연결 가중치. 망 구조와 사용할 학습 방법에 의존, 적당한 초기화 함수가 선택되어야 한다, e.g., 0.0 또는 1.0 과 같은 결정된 값으로 초기화 해야 하는 가중치가 있는 학습 프로시져가 있다, 다른 절차에서, 랜덤 초기화는 최선일 것이다, 또는 가중치가 프로토타입을 표현하는 메서드에서 그들은 전체 입력을 처리하기 위한 방법에서 평범하게 초기화된다. 초기화 함수는 망 구조에 닫힌 연결을 가지므로, 그것은 고수준 함수에서 설정되는 기본값을 변경하기 위해 보통은 필요하지 않는다.
  • 학습 함수 (Learning function): learnFunc, learnFuncParams. 학습 함수는 학습이 신경망에서 수행할 방법을 정의한다. 그것은 신경망의 중심 특성이다. 어떤 망 구조에서, e.g., ART 망, 단지 사용할 하나의 학습 함수의 타입이 필요하다. 다른 망에서, MLP 같은, 호스트 선택이 존재한다. 함수에 의존하여, 변수는 다른 의미를 가진다, e.g., Std_Backpropagation 에서, 2개의 변수가 있다, 감소도 η의 단계 폭, 그리고 목표 값과 고립된 출력 값 간의 최대 차이 dmax, i.e., 그것은 에러 값 0으로 전달된다.
  • 갱신 함수 (Update function): updateFunc, updateFuncParams. 갱신 함수는 활성화가 망 전체에서 전달되는 방법을 정의한다. 그것은 초기화 함수의 경우와 비슷하게, 망 구조에 맞게 갱신 함수를 선택해야 한다, 그래서 그것은 기본 설정 변경은 보통 필요하지 않는다. E.g., feed-forward 망에서 일반적으로 함수 Topological_Order가 사용된다, 유닛들의 위상 순서(topological order of the units)에서 유닛 활성화를 계산, 입력 층에서 유닛의 활성화가 첫번째 히든 레이어에서 활성화 전에 계산에 필요한 방법 등, 그래서 활성화는 입력에서 출력 층까지 망 전체에 전파된다. 많은 구조에서, 학습 함수에 사용 되는 같은 변수를 갱신 함수로 사용한다.
  • 메서드를 위한 특이 변수 (Special parameters for the method): hiddenActFunc, shufflePatterns, linOut. 자주, 함수에 특징적인 변수가 표현된다. mlp 에서, hiddenActFunc 변수는 감춰진 유닛(unit)의 활성화 함수를 지정한다, shufflePatterns는 정의한다, 패턴이 훈련 전에 SNNS에서 내부적으로 혼합될 것인지 아닌지, 그리고 linOut은 정의한다, 출력 유닛의 활성화 함수를 선형으로 할 것인지 로지스틱 함수로 할 것인지, 그것을 분류 또는 회귀에서 적절하게 만듬.
  • 옵션의 검증 데이터 (Optional test data): inputsTest, targetsTest. 모델 생성 단계에서 바로 검증 데이터의 제공함은 검증 집합에서 각 단계의 에러를 계산한 후에 이점을 가진다, 그리고 훈련 과정을 분석하기 위해 나중에 사용할 수 있다. 이 단계에서 데이터는 이 반복 에러를 계산하기 위해 배타적으로 사용되므로, 여기서 검증 데이터 제공은 오로지 감독 학습 방법(supervised learning methods)에서 흥미가 있다. 이 경우에, predict 함수는 검증 데이터의 결과를 얻기 위해 나중에 사용할 수 있다, 감독 그리고 비감독 학습 시나리오 둘 모두에서.
초기화, 학습, 그리고 갱신 함수 이름은 그들의 변수와 함께 직접 SNNS 커널에 전달된다. 그들의 문서에서, 우리는 Zell et al. (1998)를 언급한다. SNNS 커널에서, 각 변수의 집합은 최대 길이 5을 가진다. SNNS 커널에서 모든 접근 가능한 함수 목록은 getSnnsRFunctionTable 로 얻을 수 있다. 그들의 이름, 타입, 입출력 변수의 수를 보여준다:
R> getSnnsRFunctionTable()[196:202, ]

                  name  type  #inParams  #outParams
196 Counterpropagation     4          3           3
197        Dynamic_LVQ     4          5           5
198            Hebbian     4          3           3
199              JE_BP     4          3           3
200     JE_BP_Momentum     4          5           5
201       JE_Quickprop     4          5           5
202           JE_Rprop     4          4           4
간단한 예로, 모델을 훈련하는 쉬운 방법은 기본 변수를 이용한다, 단지 훈련 입력을 설정, 그리고 - 만약 모델에서 요구한다면 - 훈련 출력. rsnns 객체를 위해 구현된 제너릭(generic) print 함수는 구조, 함수, 그리고 모델에서 사용된 변수에 대한 정보를 얻을 수 있다:
R> encoder <- mlp(inputs, targets)
R> encoder

Class: mlp->rsnns
Number of inputs: 8
Number of outputs: 8
Maximal iterations: 100
Initialization function: Randomize_Weights
Initialization function parameters: -0.3 0.3
Learning function: Std_Backpropagation
Learning function parameters: 0.2 0
Update function:Topological_Order
Update function parameters: 0
Patterns are shuffled internally: TRUE
Compute error in every iteration: TRUE
Architecture Parameters:
$size
[1] 5

All members of model:
 [1] "nInputs"           "maxit"
 [3] "initFunc"          "initFuncParams"
 [5] "learnFunc"         "learnFuncParams"
 [7] "updateFunc"        "updateFuncParams"
 [9] "shufflePatterns"   "computeIterativeError"
[11] "snnsObject"        "archParams"
[13] "IterativeFitError" "fitted.values"
[15] "nOutputs"
rsnns 클래스에서 구현된 summary 함수 원래의 SNNS 파일 포멧에서 망의 텍스트 표현을 만들고, 그리고 그것을 보여준다 (함수의 출력은 여기에 빠졌다):
R> summary(encoder)
훈련 후에, 모델은 새로운 데이터로 예측을 위해 사용할 수 있다, 또는 R의 시각화 능력은 훈련과 검증 집합에서 훈련 과정과 모델 성능을 분석하기 위해 사용할 수 있다. 예는 6절에 주어진다.

5. Included datasets

R에서 상당히 편리한 특징은 소프트웨어 패키지에 데이터셋을 포함한다. 이것은 표준적인 검증에서 중요하다 뿐만 아니라 패기지 사용의 설명을 위해서도(6절에 표현). 다양한 데이터셋이 원래의 SNNS 예에서 표현된다, 폭넓게 다양한 망 타입 그리고 가능한 어플리케이션을 다룸. 6.5 절에 표현된 함수는 SNNS의 예제 데이터로 포함된 고정된 크기의 패턴을 가지는 모든 패턴을 R 내부에서 접근할 수 있게 변경할 수 있다. 모든 데이터는 목록 snnsData를 통해서 RSNNS에서 접근 가능하다.
R> data("snnsData")
R> names(snnsData)

[1] "art1_letters.pat"          "artmap_test.pat"
[3] "eight_016.pat"             "laser_999.pat"
[5] "letters_with_classes.pat"  "spirals.pat"
[7] "trainValidMAP.pat"         "xor_rec1.pat"
[9] "art2_tetra_high.pat"       "artmap_train.pat"
[11] "eight_160.pat"            "letseq_test.pat"
[13] "nettalk.pat"              "sprach_test.pat"
[15] "validMAP.pat"             "xor_rec2.pat"
[17] "art2_tetra_low.pat"       "bdg_TDNN.pat"
[19] "encoder.pat"              "letseq_train.pat"
[21] "patmat.pat"               "sprach_train.pat"
[23] "art2_tetra_med.pat"       "font.pat"
[25] "letters_auto.pat"         "som_cube_norm.pat"
[27] "testMAP.pat"              "art2_tetra.pat"
[29] "dlvq_ziff_100.pat"        "laser_1000.pat"
[31] "letters.pat"              "som_cube.pat"
[33] "trainMAP.pat"             "xor.pat"
데이터셋의 컬럼은 망에서 입력 또는 출력인지에 따라 명명되었다. 편의 함수 inputColumnsoutputColumns는 그들의 이름에 따라 올바르게 뽑아내기 위해 사용할 수 있다. 게다가, 함수 splitForTrainingAndTest는 훈련과 검증 집합으로 데이터를 분할하기 위해 사용할 수 있다. 그래서, 예로 laser 데이터셋은 적재되고 전처리를 할 수 있다:
R> laser <- snnsData$laser_1000.pat
R> inputs <- laser[, inputColumns(laser)]
R> targets <- laser[, outputColumns(laser)]
R> patterns <- splitForTrainingAndTest(inputs, targets, ratio = 0.15)
또한, KEEL 데이터셋 레파지토리 (http://sci2s.ugr.es/keel/datasets.php) 에서 데이터셋의 사용이 가능하다. 다양한 모델의 결과 참조는 패키지 홈페이지 http://sci2s.ugr.es/dicits/software/RSNNS/ 에서 제공된다.
이전   다음

댓글 없음:

댓글 쓰기