2009년 12월 30일 수요일

PLS 회귀분석을 위한 비선형 반복 부분최소제곱 알고리즘 (non-linear iterative partial least squares (NIPALS))

두 가지의 주어진 데이터 블럭( X: N x K 행렬, Y:N x M 행렬)에 대해서 Herman Wold의 알고리즘은 다음으로 축약된다:

  1. K-weight 벡터 w를 선택하자. 예를 들면, 행렬 X의 크기가 영이 아닌 열 벡터를 선택하자. 그리고 length가 1이 되게 정규화 하자.
  2. score 벡터를 계산하자 t = X w.
  3. Y-loading 벡터를 계산하자 q = Y^T t.
  4. Y-score 벡터를 계산하자 u = Y q.
  5. 새로운 weight 벡터를 계산하자 w1 = X^T u. w1의 length 1이 되도록 만들자.
  6. 만약 |w-w1|이 EPS보다 작다면(달리 말하자면, w와 w1이 서로 같다면), 수렴값이 구해 지는 것이고, 아니면 w=w1 수행하고, 위의 2번 과정에서 다시 시작한다.

  7. 이 반복과정의 결과물은 두 개의 score 벡터다. 하나는 행렬 X에 대한 t 벡터이고, 하나는 행렬 Y에 대한 u벡터이다. 이 결과물들이 훌룡한 선택이라면, 문제는 어떻게 다음 단계의 (t, u) score 벡터들을 얻어내야 하는 것이다. Svante는 행렬 X가  t score 벡터에 따라서 조절되어져야 하고, 행렬 Y의 t 벡터로의 regression이 계산되어지고, 동시에 행렬 Y는 찾아진 결과에 맞게 조절되어진다. 그 과정은 다음과 같이 주어진다.

  8. loading 벡터를 계산하자. p=X^T t / (t^T t)
  9. 행렬 X를 얻어진 결과에 대해 맞추자: Xnew = X - t p^T
  10. 행렬 Y의 t 벡터로의 regression을 계산하자: b = (Y^T t) / (t^T t)
  11. 행렬 Y 얻어진 결과에 대해 맞추자: Ynew = Y - t b^T
  12. 더 많은 (t,u) 가 필요하다면, 행렬을 X = Xnew, Y = Ynew 같이 치환해서 1과정으로 되돌아가자.
Harald가 제안한 방법은 약간 다르지만, 7.부터 10.까지의 과정은 동일하다. 하지만, 1. - 11. 의 과정은 1980년대에 알려진 PLS 회귀분석 알고리즘이다. 비록, H-method의 응용분야로써 표현하는 방식의 좀 더 명확하게 보여주지만, 몇몇 문헌에서는 아직도 가끔씩 이러한 방식으로 남아 있다.

PLS regression methods. Journal of Chemometrics, 2, 1988, p 211-228의 논문에서, 1.-6.의 과정은 |w| = |q|=1인 상태에서 (t^T u)을 최소화하는 X-weight 벡터 w와 Y-weight 벡터 q를 찾는 것과 동일하다. 더욱이, 다변량 분석법에서 이 방법과 Canonical Correlation 분석법 사이는 아주 유사하다. 이러한 유사성의 적용이 보여진다. 사실, distribution 이론은 Canonical Correlation방법의 그것과 같은 선상에 따라다닌다.

[출처 : http://www.predict.ws/H_principle/SvanteHarald.htm]


2009년 12월 29일 화요일

Using the Free Visual C++ 2005 Express Edition to Develop Win32 Applications

from http://www.codeproject.com/KB/applications/FreeVS2005Win32.aspx

개요

Microsoft은 상업적인 제품을 개발할때 뿐만아니라, 자유롭게 다운받아 사용할 수 있는 Visual C++ 2005 Express Edition을 내놓았다. 그러나, 당신이 괜찬은 기존 32비트방식의 wxWidgets형틀 프로그램을 사용하는 Windows 응용프로그램을 ( .NET방식이 아닌) 개발하고자 한다면, 약간이 설정 변경을 해주어야 한다.
이 글타래에 실린 정보는 새로운것이 아니며, 대부분의 것들은 구글링이나 다음링크를 클릭해서 찾아 볼 수도 있다. 많은것들이 Microsoft 포럼에서도 볼수있다. 그러나 다음의 이유로 이 글타래를 새로 만들기로 하였다.
참고자료로 이러한 정보를 기록해 놓는 것은 접근하기 쉽게한다.
  1. 한곳에 모든것을 가져다 놓아서 서람들의 시간을 절약할 수 있게 하기위해서 ( 나는 하나씩 하나씩 찾기위해서 구글을 이용하였다.)
  2. 사람들이 추가적인 유용한 정보를 추가할 수 있는 장소가 필요해서 (Microsoft 포럼은 더이상 운용되지 않는것 같아 보인다. 그래서 나는 거기에 내용을 추가 할 수 없었고, 다른 사람들도 여기에 대해서 불평하였다.)
  3. 개발자들이 새로 시작하기에 좋고 자유로운 툴을 찾는데 도움이 되고, 이러한 그들의 수고를 덜어 개발자들을 장려하기 위해서

준비물

Visual C++ 2005 Express

Microsoft 웹사이트에 가서 "Visual C++ 2005 Express" 전송받자. 보통 여러분들은 VC.iso (473,720 KB) 이라는 이름의 파일을 전송받기 원할 것이다. 이것을 CD에 굽거나 그 내용을 직접 읽어 볼 수 있도록 VCdControlTool 나 DiskPrivate 같은 자유로운 도구들을 사용하자. 지정해주는 경로대로 프로그램을 설치하자.

Platform SDK

Microsoft's 웹사이트에서 Platform SDK를 전송받자. 나는 PSDK_x86.exe (1.26 MB)이라는 파일을 받았다. "Microsoft ® Windows Server® 2003 R2 Platform SDK Web Install"에 위치한 Platform SDK를 찾아라 (여기 링크를 보라). 여러분이 직접 페이지를 내려가다 보면, PSDK_x86.exe 를 찾을 수 있을 것이다. 다음은 여러분이 필요한 것들만 모았다.
추전하는 초기 세팅으로 Platform SDK를 설치하자. 나는 Visual C++이라는 항목을 등록하기 위해서 batch 파일을 실행하지 않았다 (이것은 시작메뉴에 프로그램을 추가하한다. 하지만, 여러분이 이것을 실행하면 아무것도 수행되지 않는 것처럼 보인다. 그래서 나는 시작메뉴의 옵션을 이용해서 이것을 다시 등록해제해 버렸다. )

Visual Studio가 Platform SDK와 연동되게 하기

여기있는 대부분의 것들은 여기서 찾을 수 있는 공식적인 지침서에 기반해서 작성되었다.

Include 디렉토리

이것을 수정하지 않으면 여러분들은 windows.h을 포함시킬 수 없다는 에러를 보게 될 것이다. Visual Studio를 실행하고, Options 다이알로그 박스에 있는 Projects and Solutions 섹션 밑에 있는 메뉴에서 특정 부분에 다음 경로를 추가하라.
  • Executable files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin
  • Include files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include
  • Library files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib
위의 경로들은 Visual Studio에 저장되는지 확실히 점검하자! view를 닫고, 되돌아 가서 제대로 저장되었느지 확인하자! 또한 SDK가 다른 디렉토리에 설치되어 있는지를 보고 이 경로들이 올바른지 확인하기 위해서 Windows Explorer사용하자. 디렉토리는 실제로 이와 같을 것이다:
  • Executable files: C:\Program Files\Microsoft Platform SDK\Bin
  • Include files: C:\Program Files\Microsoft Platform SDK\Include
  • Library files: C:\Program Files\Microsoft Platform SDK\Lib
이건 많은 사람들이 가장 자주 마주치는 문제다.

Default Link Libraries

이러한 것들을 고치지 않는다면, 여러분들은 Windows API 함수들에대한 unresolved external link 에러를 맞게 될 것이다. Visual Studio를 닫고, C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\corewin_express.vsprops 열고 다음과 같은 수정하자.
Collapse Copy Code
AdditionalDependencies="kernel32.lib"
to:
Collapse Copy Code
AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib
  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"

Enable Win32 Applications

C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html\1033\AppSettings.htm 파일을 수정하자. Notepad나 다른 평범한 text editor를 사용해서, 다음라인 앞에 //를 추가하자. (as well as any other disabled = true lines if you want):
Collapse Copy Code
WIN_APP.disabled = true;
WIN_APP_LABEL.disabled = true;
DLL_APP.disabled = true;
DLL_APP_LABEL.disabled = true;

그러나...

이것들이 다 수행되어져야만 한다. 그러나...

여러분이 사용할 수 없는 것들

MFC에 대한 것들은?

포함되어 있지 않다. 여러분들은 새로운 개발 작업을 위한 대체물로 wxWidgets 같은 것들은 사용할 수 있다. MFC를 원한다면, 사용료를 지불해야 한다.

ATL / WTL에 대한 것들은?

포함되어 있지 않다. 그러나, 여러분들은 분명히 다른 CodeProject 글타래에 설명되어진 대로 ATL / WTL을 얻을 수 있다. Visual C++ 2005 Express Edition로 WTL 사용하기 .

Free 리소스 에디터에 대한 것들은 ?

Studio Express does not let you edit resource files. Taken from the above article, you can try:
  1. Here is a list of free resource editors (Looks like the Watcom C++ compiler has a standalone resource editors application)
  2. WEditRes
  3. Or (for an IDE that also seems to let you edit resources): RadASM© Win32 assembly IDE for masm/tasm/fasm/nasm/goasm/hla
  4. wxWidgets also has some sort of system where you use XML to define your resources and there are free RAD applications, but I have not looked into that yet.

What About an Installer?

If you wish to create an install/uninstall for your applications, I suggest you try the free Inno compiler. Free for commercial applications even and easy to use.

What About Other Compilers that Integrate with Visual Studio?

Visual Studio Express does not let you install other compilers such as Intel Fortran that integrate directly with Visual Studio Express. However, some of these provide their own IDEs.

Final Comment

If you know of other truly free software pieces that may be handy in this regard, please post a comment.

History

  • 23rd September, 2006: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

NeWi


Member

Occupation: Web Developer
Location: Canada Canada

정전기 방지 대책

1. 세탁시 섬유유연제 혹은 식초

2. 정전기 방지 팔찌 같은것 사용

Hierarchy among complex, vector, matrix, and, pixmap

0. Epsilon
actual zero depending on working machine

#ifndef DOUBLE_EPSILON

#define DOUBLE_EPSILON (2.22045E-016)

#endif

1. real number

type - double

2. complex number

typedef struct {

double real, double imag

} complex_t;

3. vector
typedef struct {

int length;

double *real;

double *imaginary;

} vector_t;

4. matrix

typedef struct {

int columns, rows;

double *real;

double *imaginary;

} matrix_t;

5. pixmap

5.1. header

typedef struct {

int width;

int height;

int pitch;

} maphdr_t;

5.2. bitmap
one bit corresponding one pixel

typedef struct {

maphdr_t header;

unsigned char *buffer;

} bitmap_t;

5.3. bytemap

one byte (8-bits) corresponding one pixel

typedef struct {

maphdr_t header;

unsigned char *buffer;

} bytemap_t;

5.4. wordmap

one word (16-bits) corresponding one pixel

typedef struct {

maphdr_t header;

short *buffer;

} wordmap_t;

5.5. dwordmap

double word (32-bits) corresponding one pixel

typedef struct {

maphdr_t header;

long *buffer;

} dwordmap_t;

5.6. floatmap

float type variable (float point variable containing 32-bits) corresponding one pixel

typedef struct {

maphdr_t header;

float *buffer;

} floatmap_t;

2009년 12월 28일 월요일

실제 메모리와 시스템 정보상의 메모리 용량이 다를때

Windows XP시스템상에 MIL 라이브러리 설치시 MAXMEM 옵션이 설정되어 메모리를 증설하여도 그당시의 메모리로 인식함 해결책은 boot.ini 파일에 있는 maxmem을 수정해야함
스스템 등록정보 -> 고급 -> 시작및복구 -> 설정 -> 편집
---- 변경전
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional (Memory: NT=499 MB, MIL=4.0 MB)" /MAXMEM=499 /Execute /fastdetect
---- 변경후
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /Execute /fastdetect

2009년 12월 21일 월요일

eigen vector 계산???

Eigen Decomposition Theorem
- from http://mathworld.wolfram.com

정사각 매트릭스 A의 Eigenvector로 이루어진 매트릭스 P,
그리고 Diagonal이 Eigenvalue로 이루어진 Diagonal 매트릭스 D가 주어진다면,
행렬 P가 정사각행렬일 경우
정사각행렬 A는 다음과 같이 Eigen decomposition으로 분해할 수 있다.

A=P*D*P^{-1}

여기서, D는 Diagonal 행렬이고
거기에 행렬A가 symmetric이면, P의 컬럼벡터들은 orthogonal벡터가 된다.

만약, P가 정사각 행렬이 아니라면, P는 역행렬이 존재하지 않고, A는 eigen decomposition을 수행할 수 없다.
그러나 m x n크기의 행렬 P가 m > n인 조건이라면,
대신 A는 Singular value decomposion이라는 방법으로 분해될 수 있다.

2009년 12월 18일 금요일

The implementation of PLS1

* condition
The dependant variable has only one component

* variables
X : matrix, independant variables, (the # of samples by # of dim.)
mx : vector, mean vector of matrix X (one by # of dim.)
y : vector, dependant variables, (the # of samples by one)
my : scalar, mean of vector y.
Xt : matrix, transpose of matrix X, ( the # of dim. by the # of samples)
w : vector, auxiliary weight vector, ( the # of dim. by one)
t : vector, factor coefficient vector, ( the # of sample by one)
p : vector, loading vector, ( the # of dim. by one )
q : scalar
b : vector, PLS factors, (the # of dim. by one)
bo : scalar, PLS factor

* procedure
1. mean centering
1.1. mx = mean(X)
1.2. X_{0} = X - expand(mx)
1.3. my = mean(y)
1.4. y_{0} = y - expand(y)
2. scoring (loop i to n)
2.1. Xt = transpose(X_{i})
2.2. w = Xt_{i}*y_{i}
2.3. w = w/norm(w)
2.4. t = X_{i}*w
2.5. p = Xt*t
2.6. p = p/norm(t)
2.7. q = y_{i}*t
2.8. q = q/norm(t)
2.9. X_{i+1} = X_{i}-t*p
2.10. y_{i+1} = y_{i}-t*q
3. compute PLS factor
3.1. pt=transpose(p)
3.2. b = w*inverse(pt*w)*q ; inverse(pt*w) is likely to /(pt*w)
3.3. b0 = my-mx*b

2009년 12월 15일 화요일

알루미늄 아노다이징 업체

안산에 (주)제이스 www.jeiskorea.co.kr
부천에 영광금속 www.anodizing.or.kr

2009년 12월 10일 목요일

[번역] 부분최소제곱 회귀분석 Partial Least Squares Regression (PLSR)

[출처 http://www.vcclab.org/lab/pls/m_description.html]

Partial Least Squares (PLS) regression 기법은 독립변수의 수 (# of descriptors (independent variables)) 가 샘플의 수 (# of compounds (data points)) 보다 크거나 비슷할 때나, 변수들 간의 연관성에 영향을 끼치는 또 다른 요인들이 존재할 때 같은 매우 일반적인 상황에 특히 유용하다. 이러한 경우에 전통적인 Least Squares 문제의 해법은 존재하지 않거나 있어도 불안정하고 신뢰할 수 없다. 달리 이야기 하면, PLS 접근법은 상호연관성이 있는 독립변수에 대해 안정적인, 정확한, 그리고 꽤나 잘 예측하는 모델이다 [1-3].

같은 코드 개념이 유기 화합물의 QSAR 연구에 대해 우리가 제안한 [4] Molecular Field Topology Analysis (MFTA) 기술을 구현하는 소프트웨어에 성공적으로 이식되었다.

1. 일반적인 원리

Partial Least Squares 회귀분석은 수많은 원본 데이터를 적은 수의 직교요소(orthogonal factors)들로 표현되는 새로운 변수 공간으로 선형투영(linear transition) 하는데 기초하고 있다. 다른 말로, 이러한 factor들은 원본 데이터의 상호 독립적인 (mutually independent (orthogonal)) 선형 조합 (linear combination) 이 된다. principle component regression (PCR) 과 같은 몇몇 유사한 접근법과 달리 이러한 직교 factor들은 종속변수와 극대화된 상관관계를 갖도록 하는 방향으로 선택되어진다; 그리하여, PLS 모델은 가장 최소의 필수 factor들만 갖게 된다 [2]. 만약 이러한 factor들을 많이 갖게 되면 PLS 모델은 기존의 multiple linear regression과 동일한 형태를 띄도록 된다. 게다가, PLS 접근은 핵심 직교 factor들이 주요 몇개의 주성분 (principle components)들에 낮은 연관성을 가지고 있더라도 우리가 독립변수와 종속변수 사이에 관계를 예측할 수 있도록 해준다. 이러한 개념은 두개의 독립변수 x1, x2와 하나의 종속변수 y로 이루어진 가상의 데이타 셋으로 표현되는 그림1에서 설명되고 있다. 이것은 원본 변수 x1, x2가 심하게 상호연관되어 있는 것을 쉽게 보여주고 있다. 이들로부터, 우리는 원본 변수들의 선형 조합으로 표현되는 두 개의 직교요소 (orthogonal factors)인 t1, t2로 달리 표현할 수 있다. 그 결과 첫 번째 잠재 변수인 t1으로 종속변수 y를 연관시키는 단일 factor 모델이 찾아 진다.





a



b


Fig. 1. (a) 원본 변수의 잠재 변수로의 변환, 그리고 (b) 단일 PLS factor만을 포함하는 종속변수모델 구축.

k번째 factor를 생성하는 PLS 기법의 기본 알고리즘은 다음과 같이 표현 된다:



여기서, N - 데이터의 수, M - 독립변수의 수, X[N, M] - 독립변수 행렬, y[N] - 종속변수 백터, w[M] - 보조 가중 벡터, t[N] - factor 인자 벡터, p[M] - 로딩 벡터, q - factor와 종속변수 사의 연관관계의 스칼라 인자; 모든 벡터는 컬럼 벡터이고 k+1인자가 없는 항목들은 현재의 k번째 factor에 해당되는 것들이다.

새로운 잠재 변수들은 (loading 벡터 p로 표현되는 c인자들을 가지고) 원본 독립변수들의 선형 조합이기 때문에 새로운 factor 모델은 종속변수에 대한 각 독립변수의 영향을 간접적으로 표현한다.

2. 모델 예측


factor를 구축하는 접근방법은 유용 가능한 데이터의 독립변수가 적용가능한 파라미터를 최소한 사용할 수 있도록 해준다. 그리고 그 결과, 회귀 모델은 최상의 정확성과 안정성을 가져다 준다.그러나 이 모델에서 과도하게 많은 factor들을 포함시키는 것은 독립변수의 예측 정확도를 증가 시킬 수 있지만 독립변수와 종속변수 사이의 연관성의 진짜패턴을 정확히 표현하지 못하고 랜덤 노이즈와 학습 데이터의 개개의 특성만을 대변하는 모델이 되어 벼려 예측성을 감소 시킨다. 이러한 이유때문에 모델을 구축하는 동안 교차검증 (cross-validation) 과정을 통해서 성공적인 factor를 포함 시킨 후 예측 결과를 주시해야한다. 교차 검증 과정에서 모델 구축에 사용되어지지 않은 학습데이터에서 약간을 취하는 방식으로 계산이 수차례 이루어 진다. 그런 다음, 종속변수는 이러한 모델을 이용해서 배제되었던 데이터에 대해서 예측이 이루어진다. 각 데이터는 정확히 한번 배제되어지고,