여러 신경망 모델 구축저는 예측을 위해 신경 플랫폼을 사용하고 있으며, 신경 네트워킹을 처음 접하기 때문에 숨겨진 레이어 수, 노드/숨겨진 레이어 수, 부스팅 모델, 학습 속도, 투어 등 모든 입력 매개변수에 대해 약간만 알고 있습니다. 제가 하고 싶은 것은 RMSE와 검증 모델의 오분류율을 최소화하는 것입니다. 제가 하고 있는 일은 각 매개변수를 하나씩 반복적으로 변경하고, 모델 성능 매개변수를 저장하고, 이를 새 JMP 테이블에 붙여넣는 것인데, 레이어, 노드, 투어, 등등. JMP Pro가 1,000개의 모델을 구축하고 데이터를 테이블에 덤프하는 스크립트를 작성하여 각 모델 입력 매개변수를 수동으로 변경할 필요가 없도록 할 수 있습니까?
#히든 레이어: 1 또는 2
#시그모이드 노드: 0, 1, 2, 3 또는 4
#선형 노드: 0, 1, 2, 3 또는 4
#방사형 노드: 0, 1, 2, 3 또는 4
#부스팅 모델: 모르겠어요, 아마도 1~5개 정도?
#학습률: 0.1 단위로 0~0.5
#투어: 1, 5, 10, 20, 100
그러면 2 x 5 x 5 x 5 x 5 x 5 x 5=~30,000이 됩니다.
데이터 세트에 더 익숙해지면 이들 중 몇 가지를 정리할 수 있을 것 같습니다. 물론, 많은 노드와 많은 수의 부스팅 모델을 갖는 것은 의미가 없지만(특정 다른 조합도 마찬가지), 우리는 여전히 테스트할 가치가 있는 잠재적으로 수백 개의 모델에 대해 이야기하고 있습니다. 확실히 이런 종류의 모델 선별/비교는 스크립트로 작성될 수 있습니다. 그렇죠?
예측 모델링 및 기계 학습Re: 여러 신경망 모델 구축@SDF1 귀하의 메시지를 보았지만 응답하려고 할 때 이상한 오류 메시지가 나타납니다. abm64@miami.edu .
그런데 몇 주 동안 사용하지 않은 후에 GUI의 마지막 버전은 이제 경계 상자 관련 문제 없이 내 16인치 Macbook Pro에서 작동합니다(다양한 검증 유형과 함께 연속형 Y와 범주형 Y를 모두 사용함). 내 컴퓨터에서 아무것도 업데이트한 기억이 없지만, 이 컴퓨터에서도 작동한다는 게 정말 기쁘네요(항상 내 Macbook Air에서는 작동했고, 이제 막바지 상태입니다!).
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
흥미롭게도 이 문제는 실제로 Macbook Pro(및 아마도 실행 중인 OS)와 관련이 있는 것 같습니다. OS 또는 하드웨어와 관련이 있을 수도 있습니다. 예를 들어 JMP가 Pro에서 그래픽 처리 장치를 사용하는 방식은 Air에서 사용하는 방식과 다소 다릅니다. Mac에서 두 대의 컴퓨터를 동일한 GPU로 만들었는지 아니면 하드웨어 문제일 수 있는지 확인해 보세요. 어쨌든 JMP 개발자들은 여러분이 겪고 있는 구체적인 상황에 대해 더 알고 싶어할 것이며 Discover Summit에서 이 문제를 알리는 것이 도움이 될 것입니다. 적어도 내 무능함은 아니야! 
아직도 Air에서 방송하실 수 있어서 다행입니다. 귀하의 Air가 계속해서 비디오를 제작하여 Summit에 제출할 수 있기를 바랍니다. 강연 시간을 알려주십시오. 보고 싶습니다.
감사해요!,
DS
Re: 여러 신경망 모델 구축제가 이번 주에 무엇을 배웠는지 아시나요? 말 그대로 제가 Macbook Pro 작업에 보낸 시간 중 가장 많은 시간입니다. JMP Pro 16.1에는 내 Macbook Air에는 전혀 없는 작고 짜증나지만 대부분 사소한 버그가 많이 있습니다. 그리고 모두 미학과 관련이 있습니다. 예를 들어, 왼쪽에 스크립트를 그룹화한 다음 클릭하여 그룹화된 폴더를 확장하는 방법을 알고 계십니까? 작동하지 않습니다. 글쎄요, 가끔은 효과가 있어요. 확장 화살표를 클릭한 다음 화면의 다른 곳을 클릭하고 돌아와서 다시 클릭하면 결국 확장됩니다. 다른 Mac에 있는 동일한 OS 및 동일한 버전의 JMP Pro에서는 전혀 발견하지 못했던 작고 이상한 일들이 있습니다. 따라서 JMP와 이 특정 컴퓨터가 서로 통신하는 데 문제가 있는 것임에 틀림없으며 이는 스크립트에 영향을 미칩니다. 왜냐하면 그것은 외모와 관련이 있는 것 같기 때문입니다. 즉, 당신의 무능함 때문은 아니라고 생각합니다. ㅎㅎ 그리고 다른 컴퓨터에서도 새로운 GUI를 계속 사용할 것으로 기대합니다. 실제로 업무용 컴퓨터에 이 내용을 입력하는 동안 2,000개의 NN 모델이 실행되고 있습니다. 내 Macbook Air의 부패한 특성을 고려하여 결국 이러한 Macbook Pro 문제를 파악하면 됩니다. 사실, 나는 이 모든 작은 버그와 이상한 점을 기록하기 시작하고 Discovery Summit에서 일부 개발자와 대화를 시도할 수도 있습니다. 정말 내 컴퓨터의 문제인지 아니면 일반적인 Macbook Pro의 문제인지 궁금합니다. 최신 Mac OS(Big Sur)로 업그레이드하고 싶지는 않지만 이것이 실제로 해결책이 될 수 있는지 궁금합니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
계속해서 오류가 발생한다는 소식을 들으니 안타깝습니다. 제가 업로드한 "GenAT_ver3.0.jsl" 파일이 제가 사용하고 있는 파일입니다. 업무용(JMP 16.0 Pro)과 개인용 PC(JMP EA17)에서 사용해 보았는데 둘 다에서 작동합니다. 데이터를 맞추려고 할 때 두 PC 모두에서 오류가 발생하지 않습니다. Macbook Pro가 적합 보고서 창을 처리하는 방법에 관한 내용임에 틀림없습니다. 특정 컴퓨터에 액세스하지 않고 문제를 해결하는 방법에 대해 난감합니다. 보고서 창의 트리 구조를 보고 PC, Macbook, Macbook Pro의 차이점이 무엇인지 알아내려고 노력해야 했습니다.
나는 돌아가서 귀하의 로그 파일을 자세히 살펴보고 귀하가 생성한 특정 DOE에 관한 것일 수도 있다고 생각했지만 해당 DOE를 실행하고 이를 기반으로 튜닝 테이블을 만들더라도 작동합니다. 적어도 내가 사용하는 PC에서는 작동합니다.
Macbook Pro에서 실행되지 않는 경우 강연을 위한 GUI를 시연하지 못할 수도 있기 때문에 안타까운 일입니다. 이 문제에 대해 제가 더 많은 도움을 받을 수 있었으면 좋겠습니다.
DS
Re: 여러 신경망 모델 구축유익할 수 있는 또 다른 사항: 연속적인 Y가 있더라도 동일한 메시지가 표시됩니다(검증 유형에 관계없이). 이상한!
Re: 여러 신경망 모델 구축방금 Macbook Pro를 사용해 보았는데 동일한 개요 상자/인수 1 오류가 발생했습니다. 하지만 뭔가를 발견했습니다. 7월 버전 이름은 "3.0"이었습니다. 업데이트했지만 실수로 이전 버전을 업로드했다고 생각하시나요?
Re: 여러 신경망 모델 구축엄청난! 하자 지금 확인하고 다시 보고하세요. 알고 보니 JMP 지원 DID도 같은 결론을 내렸기 때문에 이제는 제대로 작동할 것이라고 확신합니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
파일을 보내주셔서 감사합니다. 어디서 실수가 발생하는지 파악하는 데 도움이 되었습니다. 그것은 평범한 프로그래밍과 JMP 내의 트리 구조에 대한 완전한 이해와 관련이 있습니다. (저는 이것에 대해 모두 독학했습니다.) 어쨌든 최신 버전의 날짜가 거의 맞습니다. Y 값이 어떤 종류의 모델링 데이터인지에 따라 적합 통계가 트리 구조에서 위치를 변경한다는 사실을 설명하기 위해 7월 초쯤에 항목을 업데이트했습니다. 예: 숫자 , 순서형 또는 범주형입니다. 나는 거의 100% 순전히 숫자 응답으로 작업하고 있으므로 정기적으로 이 오류를 보지 못했습니다. 다른 모델링 유형의 데이터에 대한 적합 통계에 대한 정보를 올바르게 제공하기 위해 해당 변수를 할당하는 방법을 수정해야 했습니다. 다행히도 JMP 측면에서는 모든 것이 논리적이어서 수정이 그리 어렵지 않았습니다.
사용 중인 OS 또는 JMP 버전에 관계없이 이 문제를 해결하는 ver3.0이 첨부되어 있습니다. 어떤 의미에서는 이것이 "제3자" 코드이기 때문에 지원이 크게 도움이 될 수 없을 것이라고 생각합니다. 어쨌든, 이 ver3.0을 사용해 보시고 계속 오작동하는 경우 알려 주시기 바랍니다.
감사해요!,
DS
Re: 여러 신경망 모델 구축JMP Pro 15를 사용해 보았지만 여전히 같은 오류 메시지가 나타납니다.
'Outline Box' , 개요 상자/*###*/(o_box) 액세스 또는 평가에서 예상되는 문자 인수 1
저는 7월 10일쯤부터 GUI 버전 3을 사용하고 있습니다. 그게 가장 최근의 일이었죠, 그렇죠?
디버거를 실행했을 때 "개체 단추 상자가 메시지 전송을 인식하지 못합니다. 아마도 다음 중 하나를 의미하는 것 같습니다..."라고 말한 다음 몇 가지 대안을 나열합니다. 그러나 버튼 상자의 모양은 양호하고 모든 버튼이 작동합니다.
귀하의 트리 구조 인수가 문제일 수 있다고 생각하지만 동일한 OS(Catalina)입니다. 기술 지원에 문의하겠습니다.
Re: 여러 신경망 모델 구축GUI(마지막 스크립트)를 사용하여 로그와 테이블을 첨부하고 있습니다. 나는 예측하려는 여러 가지 항목(Y)에 적합한 모든 검증 유형을 시도했습니다. 일반적으로 나는 (모든 것이 작동하는) 내 개인 Macbook에서 모든 작업을 수행하지만, 그 컴퓨터는 몇 주가 지나면 더 새롭고 멋진 Macbook Pro에서 모든 작업을 수행할 수 있기를 바랍니다! 그동안 나는 몇 가지를 시도해 볼 예정이다. 방금 GUI의 이전 버전(여전히 버그가 있음)을 복사했을 가능성이 약간 있습니다. 이는 간단한 수정이 될 것입니다. 하지만 상관없이 다른 버전에서는 작동했기 때문에 그것이 문제라고 생각하지 않습니다. 컴퓨터. 혹시 이상한 점이 있으신지 궁금합니다. 다시 한번 조사해 주셔서 감사드립니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
Pro가 아닌 Air에서 작동하는 것은 이상한 동작입니다. 내가 정확하게 기억한다면, 해당 o_box 호출은 피팅 통계 중 일부를 추출하는 것이며 사용 중인 검증 방법 유형(홀드백, 제외된 행 등)에 따라 변경될 수 있습니다. 두 버전 모두 16.1을 실행하고 있으므로 JMP 버전인 것 같지 않습니다. 두 컴퓨터 모두에 동일한 유효성 검사 방법을 사용하고 있습니까? 어떤 방법을 사용하고 있나요?
내 유일한 추측은 하나의 Macbook 모델에서 다음 모델로 작동하지 않는 경우 보고서의 트리 구조에 변경이 있어야 하며 JSL 코드가 특정 위치에 있을 값을 찾고 있지만 다시 돌아오는 것입니다. 비어 있거나 NAN 등이 있으면 오류가 발생합니다. 이것은 아마도 내 코딩 기술을 약간 넘어서는 것일 수 있습니다. 이를 OS 독립적으로 만드는 것은 나에게 적합하지 않을 수 있습니다. 저는 PC, Windows10에서 실행하고 있습니다. JMP에는 이 문제를 해결하여 다른 OS 등에서 실행할 수 있는 방법을 알아낼 수 있는 숙련된 프로그래머가 있다는 데에는 의심의 여지가 없습니다.
오류를 재현할 수 있으면 비교적 쉽게 수정할 수 있지만 Macbook Pro에 액세스할 수 없습니다. 그 동안 Macbook Pro에서 실행하고 로그 파일을 확인하여 어떤 코드 줄에서 문제가 발생하는지 알 수 있는지 확인할 수 있습니까? 이는 버그의 위치를 좁히고 해결 방법을 찾는 데 도움이 될 수 있습니다.
감사해요!,
DS
Re: 여러 신경망 모델 구축G 아르 자형 먹다. 정말 고마워. 뭔가 알아차렸는데 오늘 1일: Catalina와 JMP Pro 16.1을 실행하는 내 13인치 Macbook Air에서는 모든 것이 작동합니다. 그런 다음 Catalina 및 JMP Pro 16.1을 실행하는 내 작업 Macbook Pro 16인치로 마이그레이션하고 정확히 동일한 데이터 테이블과 GUI를 사용했으며 'Outline Box'에 대한 액세스 또는 평가에서 이상한 "예상 문자 인수 1"이 표시됩니다. , 개요 상자/*###*/(o_box)" 입력 내용에 관계없이. 실제로 디스플레이(즉, 더 큰 화면)에 연결될 수 있다고 생각하시나요? 분명히 아니다. 스크립트가 한 컴퓨터에서는 실행되고 다른 컴퓨터에서는 실행되지 않는 것이 이상해 보입니다. 어떤 아이디어가 있나요?
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
문제 없습니다. 도움이 되어 기쁘네요. 예, XGBoost 조정이 좀 더 복잡할 수 있습니다. 블로그를 찾았어요 여기 매우 유용합니다. 해당 페이지의 마지막 블로그 항목이지만 어떤 이유로 블로그 기사에 대한 링크가 실제로 응답하지 않습니다. Python에서 이를 수행하는 방법에 대한 예를 제공하지만 모델 매개변수에 대한 전문 용어를 파악하고 나면 JMP에서도 기본적으로 동일합니다. 나도 이걸 찾았어 대지 그리고 함께 제공되는 문서는 XGBoost가 수행하는 작업과 모델을 어느 정도 보수적으로 만드는 매개 변수를 읽는 데 매우 도움이 됩니다. 제가 좋아하는 점 중 하나는 부스트 트리나 랜덤 포레스트보다 훨씬 안정적이라는 것입니다. 두 가지 모두 R^2에서 일부 확률론적 동작을 가지므로 모든 매개변수가 동일한 피팅을 실행할 때마다 모델이 약간씩 달라집니다. XGBoost는 동일한 매개변수 세트를 실행할 때마다 동일한 피팅 품질을 제공합니다.
Discovery 강연에서 NN GUI에 대해 자유롭게 언급해 주세요. 저는 가상으로 참석할 계획이고 Cary를 직접 방문하려고 했습니다(한 시간 거리에 있음). 대유행으로 인한 문제가 계속되자 그들은 대면 모임을 중단했습니다. GUI를 추가 기능 페이지에 게시했으므로 기술적으로는 "게시"되어 있는 것 같습니다. 데모를 요청하고 생각해 주셔서 감사합니다. 원활하게 진행되길 바랍니다! 나는 최고의 프로그래머는 아니지만 작업을 수행할 수 있습니다. 문제가 발생할 경우 알려주시면 최대한 빨리 수정하도록 노력하겠습니다.
감사해요!,
DS
Re: 여러 신경망 모델 구축우와! 정말 고마워요 r 표와 설명. 마침내 모든 NN 전문 용어에 익숙해졌기 때문에 XGBoost가 쉬울 것이라고 생각했습니다. 하지만 아직 배워야 할 것이 많은 것 같습니다(한 가지 전문 용어를 익히기 위해)! XGBoost는 현재 기계 학습 세계에서 일종의 "사랑"인 것처럼 보이지만 더 중요한 것은 XGBoost가 실제로 내가 생성하는 데이터 유형에 더 적합할 수 있다는 점입니다. 이 모든 것(예를 들어 GUI가 백그라운드에서 실행되는 동안!) 그런데 제가 JMP Discovery 강연(이번 주에 녹음할 예정)에서 NN GUI에 대해 언급하고 시연해봐도 될까요? 나는 당신에게 공로를 인정할 것이지만, 당신이 그것을 더 많은 청중에게 공개하고 "당신의 천둥을 훔치는"것을 원하지 않는 사람이 되고 싶다면 전적으로 이해합니다. 금요일까지(내가 강연을 녹음할 때) XGBoost의 마스터가 될 수 있을지 의심스럽기 때문에 신경 플랫폼을 사용할 것입니다. 하하.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
아직 16.1로 업그레이드하지 않았기 때문에 같은 오류가 발생하지 않았습니다. 그러나 혹시라도 발생할 경우를 대비해 눈을 크게 뜨고 필요한 경우 업데이트를 게시하겠습니다.
XGBoost의 경우, 이를 최적화할 수 있는 튜닝 테이블이 있습니다. 여기에 첨부되어 있습니다. XGBoost 플랫폼에는 수정할 수 있는 다양한 튜닝 매개변수가 있습니다. 일부는 다른 것보다 더 영향력이 있습니다. 나는 일반적으로 모델의 매개변수 공간이 매우 크기 때문에 단계별로 모델을 조정합니다. 튜닝 테이블에 대해 가능한 모든 매개변수가 있는 것은 아니며 가장 영향력 있는 매개변수만 있습니다(적절한 이름의 열을 사용하여 언제든지 더 추가할 수 있습니다). XGBoost 창에서 "고급 옵션" 하위 메뉴를 열어 플랫폼의 전체 매개변수 목록에 액세스할 수 있습니다. 불균형이 심한 데이터 세트가 있다고 언급했으므로 scale_pos_weight 매개변수가 1로 설정되어 있는지 확인해야 합니다.
실제로 플랫폼 자체에서 튜닝 설계를 실행할 수도 있습니다. 여기서 공간 채우기 DOE를 사용하여 튜닝 테이블을 생성합니다. 꽤 편리하고 유연합니다. 그러나 CPU 사용과 RAM 최소화를 위해서는 JMP 내에서 GUI가 작동하는 방식으로 실행하는 것이 더 낫다는 것을 알았습니다.
내 상황에서는 다음 단계를 따르는 것이 XGBoost에 매우 효과적이라는 것을 알았습니다.
1. 먼저 올바른 수의 트리를 찾기 위해 학습률, max_length, min_child_weight, gamma, subsample 및 colsample_bytree를 수정합니다. 이러한 다른 매개변수는 나중에 조정됩니다. 처음에는 기본값으로 설정했습니다.
2. max_length 및 min_child_weight 조정
3. 감마 조정(4단계로 이동하기 전에 트리 수를 다시 조정하는 것이 좋습니다)
4. 하위 샘플 및 colsample_bytree 조정
5 정규화 매개변수인 알파 및 람다 조정
6. 학습률 조정: 학습률을 낮추고 트리 수를 늘립니다.
각 단계에서 조정하려는 매개변수에 대한 조정 테이블을 생성하고 다른 매개변수는 해당 단계에 대해 고정된 상태로 유지합니다. 나는 일반적으로 이 시퀀스를 두 번 실행합니다. XGBoost를 실행할 때 교차 검증(K-겹 또는 검증 열)을 사용하는 것이 중요합니다. 교차 검증 없이 피팅을 실행할 수 있지만, 그러면 데이터가 과적합되어 결국에는 그다지 뛰어난 예측 모델을 갖지 못할 위험이 있습니다.
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축포인트 #1은 신경쓰지 마세요. 제 생각에는 뭔가 이상한 일이 있거나 샘플을 훈련, 검증, 테스트로 적절하게 계층화하는 것이 이상하다고 생각합니다. 기본적으로 저는 제가 예측하려는 한 그룹이 훨씬 더 일반적인 완전히 불균형한 디자인을 가지고 있기 때문에 이것이 문제의 원인이라고 생각합니다!
Re: 여러 신경망 모델 구축JMP Po 16.1로 업그레이드한 후 NN GUI를 다시 사용하기 시작했는데 "아래 첨자 범위" 오류가 다시 발생한다고 명시했습니다. 이 문제가 발생했나요?
또 다른 참고 사항으로, XGBoost 튜닝 테이블에 대한 DOE 스크립트가 있습니까? 나는 당신의 GUI를 통해서도 그 접근 방식을 탐구할 것입니다! 정말 고마워
Re: 여러 신경망 모델 구축모든 정보에 정말 감사드립니다. 나는 실제로 내가 무엇을 하고 있는지 전혀 모르는 채 수많은 모델을 만들려고 노력했을 것입니다. 2년 전 저는 다른 접근 방식으로 이 작업을 수행했고 Nature 기사를 쓰려고 하던 중 우리가 알고 있는 해양 생물학을 바꿨다고 생각했습니다. 그러다가 제가 모델을 완전히 잘못 해석하고 있다는 것을 깨달았습니다. 하하. 고맙게도 AI와 기계 학습 모델은 제가 일하는 현재 큰 인기를 끌고 있습니다. 따라서 AI와 기계 학습 모델을 사용하려는 동기는 그것을 자르지 않는 전통적인 접근 방식에 의해 주도되었지만(AI가 "섹시하다"는 이유로 AI를 하고 싶다기 보다는) , 저는 이러한 종류의 분석에 대한 관심의 물결을 활용하여 모든 내용을 배우려고 노력할 수 있기를 바랍니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
XGBoost 추가 기능의 경우 별도로 추가 기능을 다운로드하여 설치해야 합니다. JMP Pro 15 이상에서 작동합니다. 추가 기능을 찾을 수 있습니다 여기 . 자신만의 모델링을 시작하기 전에 문서를 읽고 게시물에서 Russ가 설명하는 테스트 모델링 중 일부를 시도해 보십시오. 현재 해당 플랫폼은 여전히 피팅의 하이퍼파라미터를 수정/조작하는 방법에 대해 사용자의 이해가 좀 더 필요한 플랫폼입니다. 나는 이것을 찾았다 블로그 XGBoost 플랫폼을 튜닝할 때 매우 유용합니다(조정해야 할 다양한 매개변수가 많아 전체 공간이 상당히 번거로워집니다). Python 사용자를 위해 작성되었지만 동일한 기본 아이디어가 JMP 플랫폼에도 잘 적용됩니다. 이것 동영상 또한 도움이 되며, 모델의 각 매개변수가 수행하는 작업, 작동 범위, 기본값에서 수정하려는 이유와 수정하지 않으려는 이유도 읽어보고 싶을 것입니다. 여기 . 백그라운드 숙제를 하지 않고 그냥 뛰어들기 위한 플랫폼은 확실히 아닙니다. 나는 처음으로 뛰어들면서 이것을 어려운 방법으로 발견했고 내가 무엇을 하고 있는지 몰랐다는 것을 깨달았습니다. 그래서 숙제를 좀 했는데 도움이 많이 됐어요. 이제 위에 나열된 블로그의 프레임워크를 사용하여 매우 빠르게 모델을 조정할 수 있습니다.
행운을 빌어요!,
DS
Re: 여러 신경망 모델 구축설명해 주셔서 정말 감사하고, 제 가정이 틀렸기 때문에 물어봐서 다행입니다. 그러나 각 "실행"은 어떤 샘플이 훈련 모델에 있고 어떤 샘플이 보류되는지에 대한 무작위 섞기가 될 것입니다. 이전에 말씀하셨듯이 작고 넓은 데이터 세트를 사용하면 행을 수동으로 제외하거나 유효성 검사 열을 만드는 것이 더 합리적입니다. 따라서 실제로는 모든 다양한 옵션을 "마스터"하려고 노력 중입니다. 미래에는 홀드백과 kfold를 사용할 수 있는 데이터 세트를 갖게 될 것입니다. 특히 후자가 매력적이고 영리하다고 생각합니다.
나는 귀하의 GUI를 사용하는 약 15,000개의 모델을 가지고 있습니다. 과장하지 마십시오. 이제 GUI 이전에는 전혀 들어본 적이 없는 기술인 NN과 XGBoost를 비교해 보겠습니다. JMP Pro 16에 있는지조차 모르겠습니다(물론 어딘가에 숨겨져 있을 수도 있습니다)!
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
답변이 늦어 죄송합니다. 제가 지난주에 휴가를 나갔거든요.
홀드백 부분에 대한 귀하의 질문과 관련하여 JMP는 홀드백 값을 기준으로 행의 비율을 무작위로 선택하는 것으로 알고 있습니다. 따라서 100개 행이 있고 홀드백 부분으로 0.3을 선택하면 JMP가 NN 플랫폼을 실행할 때마다 검증 부분으로 30개 행의 새로운 무작위 세트가 선택됩니다. 따라서 튜닝 테이블 사용 측면에서 플랫폼은 새로운 모델 매개변수 세트를 NN 플랫폼에 보내는 각 반복이라고 합니다. 검증을 위해 홀드백 옵션을 선택하고 0에서 1 사이의 숫자를 입력한 경우 튜닝 테이블에서 새로 실행될 때마다 JMP는 홀드백 부분에 따라 다른 행 집합을 선택합니다. 그러나 단일 NN 모델 피팅 중에 여러 투어를 실행하는 경우 각 투어 중에 동일한 홀드백 행을 사용합니다. NN 플랫폼이 호출될 때마다 검증을 위한 새로운 하위 집합이 생성됩니다. 이것은 적어도 나의 이해입니다.
위의 상황에서는 어떤 행이 보류되었는지 알 수 없습니다(적어도 제가 아는 바는 아닙니다). 그런 작업을 수행하려면 제외된 행 보류 유효성 검사 옵션을 선택합니다. 그런 다음 데이터 테이블에서 제외할 행을 선택할 수 있으며 해당 행만 유효성 검사에 사용됩니다. 아마도 홀드백 부분을 사용하여 각 튜닝 실행에 대해 특정 무작위 시드(예: 10191)를 NN 플랫폼에 공급할 수 있으며 매번 해당 난수를 사용하여 검증을 위한 하위 집합을 생성할 것입니다. NN 플랫폼이 호출될 때마다 동일한 무작위 시드에서 시작하므로 이론적으로 JMP는 각 튜닝 실행에 대해 동일한 행을 선택해야 합니다. 그러나 이 경우에도 해당 행이 무엇인지 알 수 없습니다. 다시 말하지만, 이것이 어떻게 작동하는지에 대한 나의 이해입니다.
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축귀하의 멋진 GUI 덕분에 저는 이제 문자 그대로 10,000개의 이상한 모델을 실행했습니다. 홀드백에 관해 질문이 하나 있었습니다. 내 튜닝 테이블에 100개의 행이 있다고 가정해 보겠습니다(즉, 테스트할 다른 모델). 각 행은 백분율을 기준으로 무작위 보류를 받습니까, 아니면 각 모델에 대해 동일한 X 수의 샘플이 보류됩니까? 나는 후자일 것이라고 추측한다. 즉, 샘플 A, B, C, D가 모델 #1에서 보류되면 동일한 4개 샘플이 모델 #2에서도 보류됩니다. 내 후속 질문은 다음과 같습니다. 어떤 샘플이 보류되는지 알 수 있습니까? 어쨌든 우리가 논의한 것처럼 제 경우에는 계층화된 검증 열을 사용하는 것이 더 합리적입니다. 왜냐하면 각 처리에서 최소한 하나의 샘플이 훈련, 검증 및 테스트로 포함되도록 할 수 있기 때문입니다. 반면 무작위 30% 홀드백은 이론적으로 가능합니다. 동일한 처리의 샘플만 보류하세요(이렇게 하면 해당 처리에 유리한 예측이 편향될 수 있습니다!)
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
문제가 해결되었다는 소식을 들으니 정말 기쁘고 버그가 해결되었으면 좋겠습니다. 더미 데이터 테이블 문제의 상단에 대한 더 나은 솔루션이 있었으면 좋겠습니다. 솔직히 그 문제를 해결하는 방법을 모르겠습니다.
어쨌든, 나는 Kfold xvalidation에 대해 당신이 옳다고 믿습니다. 이 방법은 일반적으로 키가 큰 테이블에 더 잘 작동하지만 넓은 테이블에는 적합하지 않습니다. 데이터 항목이 거의 없다면 응답에 따라 계층화된 검증 열을 사용하는 것이 좋습니다. 또는 GenReg 플랫폼을 사용하는 경우 Leave One-Out 접근 방식을 사용할 수 있습니다. 그러나 일반적으로 고려해야 할 데이터 포인트가 거의 없다면 Kfold는 최고가 아닙니다.
XGBoost를 살펴보는 것이 좋습니다. JMP의 추가 기능 페이지에서 추가 기능을 다운로드할 수 있습니다. 매우 안정적이고 강력한 알고리즘입니다. XGBoost는 유효성 검사 열과 매우 잘 작동합니다.
JMP Pro에 포함된 서포트 벡터 머신을 살펴보는 것도 고려해 볼 수 있습니다. 원래 분류 문제를 위해 개발되었지만 회귀 문제도 처리할 수 있습니다. 어떤 경우든, 모델 훈련이나 xvalidation에 사용되지 않은 홀드아웃 데이터 세트를 사용하여 다양한 모델을 비교하는 것은 항상 좋은 생각입니다. 나는 일반적으로 여러 가지 다른 모델을 구축한 다음 완전히 새로운 데이터 세트를 비교하여 결과를 예측하는 데 가장 적합한 것이 무엇인지 확인합니다.
도움이 될 수 있어서 기뻐요!,
DS
Re: 여러 신경망 모델 구축정말 대단해요. 각 검증 방법에 대해 100번의 반복 배치를 수행하고 있으며 아직 오류가 발생하지 않았습니다. 아직 "제외된 행"을 시도하지는 않았지만 작동할 것이라고 확신합니다.
kfold는 항상 동일하고 완벽한(과적합?) 솔루션을 제공합니다. 하지만 이는 스크립트에 발생한 오류가 아니라 내 데이터 세트의 크기/형식에 대한 증거라고 생각합니다.
과학적으로 나는 몇 가지 연구를 해왔고 내 "작은" 데이터 세트(수십 개의 샘플과 수백 개의 잠재적 예측 변수)가 XGBoost에 더 적합한지, 아니면 신경망이 과잉일 수 있는지 나타납니다. 그래서 시도해 보겠습니다. 플랫폼도요. 저는 XGBoost가 JMP에서 지원된다는 사실조차 몰랐습니다(반면에 저는 무작위 포리스트를 본 적이 있고 GUI에서 다른 접근 방식을 본 것 같습니다). 즉, 나는 이 훌륭한 연구 도구의 모든 구성 요소를 활용하기를 기대합니다! 귀하의 도움에 다시 한 번 감사드리며, 다른 오류가 발생하면 알려드리겠습니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
그래서 코딩에 어떤 문제가 있는지 알아냈습니다. 이는 JMP 버전마다 문제가 되는 것이 아니라 명목형 또는 순서형 반응에 대한 수준 수와 관련이 있습니다. 그러면 보고서 창의 열 번호 상자 위치가 변경됩니다. 2, 3, 4, 6개 수준의 응답에서 이동할 때 적합성에 대한 통계가 보고서 내에서 위치를 변경한다는 것을 반영하도록 코드를 조정해야 했습니다. 좋은 점은 레벨 수에 따라 고정된 양으로 변경되므로 비교적 쉽게 코드를 수정할 수 있다는 것입니다. 샘플 데이터의 PowderMetallurgy 파일을 사용했기 때문에 해당 버그를 알아내는 데 시간이 좀 걸렸지만 귀하와 같은 4레벨이 아닌 2레벨에 불과합니다.
응답 변수의 다양한 수준에 더욱 일반화된 업데이트된 버전이 첨부되어 있습니다. 코드는 명목형, 순서형 및 연속형 응답뿐만 아니라 2수준 또는 3수준 검증 열에서도 이미 작동해야 합니다.
귀하의 데이터 세트를 사용하여 NN, BT, Bootstrap Forest 및 XGBoost 등 모든 적합한 플랫폼을 테스트했으며 모든 데이터 유형과 다양한 검증 옵션에서 제대로 작동합니다. 현재 JMP는 부스팅 트리 플랫폼을 사용하여 2단계 반응(명목 또는 순서)에만 적합할 수 있습니다. 다른 플랫폼은 그보다 더 많은 레벨을 처리할 수 있습니다.
이제 의도한 대로 작동하고 있다고 확신합니다(마지막으로 열린 데이터 테이블을 기본값으로 설정하는 것을 제외하고 - 이 문제를 해결하는 방법을 모르겠습니다). 그러나 버그를 발견하면 알려 주시기 바랍니다.
감사합니다. 행운을 빕니다!
DS
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
내 데이터 테이블에도 동일한 문제가 있습니다. 내 생각에 맞는 것 같습니다. 모델링에 사용된 데이터 테이블에서 직접 실행하지 않으면 JMP 홈 창에서 마지막으로 열린 데이터 테이블이 기본값으로 설정됩니다. 이 문제를 해결하는 방법을 모르겠습니다.
흠, 코드는 훈련과 검증만 있거나 이 세 가지 모두인 검증 열과 함께 작동해야 합니다. 검증란의 수준 수를 확인하고 그에 맞게 조정하기 위해 작성했는데, 이는 수준이 2개이든 3개이든 적절한 적합 통계를 기록한다는 의미입니다. 내일 다시 확인해 보겠습니다. 아래 첨자 범위 오류는 15에서 16 사이의 변경으로 인해 발생한 것 같습니다. 16이 나왔을 때 돌아가서 코드가 제대로 작동하는지 다시 확인하지 않았지만 15에서 여러 테스트를 거쳐 실행했고 모든 것이 작동했습니다. 그럼에도 불구하고 나는 이 문제를 해결하고 예상대로 작동하도록 수정하겠습니다. 금요일 아침까지 도달할 시간이 없을 것입니다.
다시 한 번 코드 디버깅에 도움을 주셔서 감사드리며, 불편을 끼쳐드려 죄송합니다. JMP 추가 기능으로 제출할 때와 마찬가지로 모든 데이터 유형과 코드 유형을 확인한 후 다시 연락드리겠습니다.
감사해요!,
DS
Re: 여러 신경망 모델 구축엄청난! 이제 우리는 불로 요리를 하고 있습니다. 지금 내가 볼 수 있는 유일한 것은 GUI에서 어느 것이 데이터 테이블이고 어느 것이 튜닝 테이블인지 알려달라고 요청하더라도 여전히 가끔 혼동된다는 것입니다. 나는 "더미의 상단"에 더 가까운 테이블이 기본적으로 설정되어 있다고 생각합니다. (저는 10-20개의 테이블을 열어 두는 경향이 있습니다. 그렇지 않으면 문제가 되지 않을 것입니다.)
"검증 열에 훈련 및 검증 용어만 있는 경우 테스트 데이터를 계산하지 마십시오"라는 간단한 "규칙"을 추가할 수 있습니까? 대안은 코드를 수동으로 살펴보고 모든 "테스트" 옵션 앞에 "//"를 넣는 것입니다. 가끔 훈련/검증/테스트 대신 훈련과 검증만 사용하기 때문에 묻습니다(샘플 크기가 작기 때문에). 지금 훈련 및 검증 용어만 포함된 검증 열을 입력하면 "아래 첨자 범위" 오류가 발생하는데, 제 생각에는 거기에 없는 "테스트" 데이터를 찾고 있기 때문인 것 같습니다!
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
이를 파악하고 알려주셔서 다시 한번 감사드립니다. 제 모델은 숫자로 응답하는 경향이 있으므로 명목 데이터 유형에 대해서는 일반적으로 편집할 필요가 없습니다.
어쨌든 JMP 15에서 16으로의 변경으로 인해 보고서 창에 숫자 열 상자가 달라졌을 수도 있다고 생각합니다. 이전에는 동일한 값을 모두 변경해야 했고 이전에는 작동했기 때문입니다. JMP 15를 테스트했던 기억이 납니다. 다시 확인한 결과 이 업데이트된 버전은 제외된 행 홀드백, 홀드백, kfold 및 검증 열과 같은 NN에 대한 다양한 검증 방법으로 올바르게 실행됩니다. 불편을 끼쳐드려 다시 한번 죄송합니다. 테스트해보시고 버그를 알려주시면 더 나아지고 다른 사람들에게도 도움이 될 수 있게 되어 기쁩니다. 다른 것을 찾으면 알려주세요!
감사해요!,
DS
Re: 여러 신경망 모델 구축조사해 주셔서 감사합니다. 이제 유효성 검사 열과 함께 작동하지만 Holdback 또는 kfold를 사용할 때 동일한 오류 코드가 나타납니다. 이러한 방법이 내가 예측하려는 각 저장소가 표시되는 위치로 데이터를 반드시 계층화하지 않기 때문인지 궁금합니다. 더 큰 데이터세트로 시도해 보고 동일한 "첨자 범위" 오류가 발생하는지 확인하겠습니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
죄송합니다. 다시 연락하는 데 시간이 좀 걸렸습니다. 나는 당신이 겪고 있는 오류를 재현할 수 있었고 내 코드에서 실수가 있는 곳을 찾아냈습니다. 348행과 349행의 ncol_box_v 및 ncol_box test 변수에 잘못된 값이 있습니다. 각각 10과 19여야 합니다. 이를 수정하고 유효성 검사 열을 사용하여 NN을 다시 실행했는데 제대로 작동했습니다. 수정된 코드를 첨부하겠습니다. 불편을 드려 죄송합니다. 찾아주셔서 감사합니다. 다른 버그를 발견하면 알려주시기 바랍니다.
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축와, 이 GUI가 정말 업그레이드됐네요! 유일한 문제는 이제 다음과 같은 오류가 발생한다는 것입니다.
사용하는 검증 유형에 관계없이 'V_stats[ /*###*/5]' , V_stats[/*###*/5" 액세스 또는 평가의 첨자 범위입니다. 네 그룹(Y와 같이) 각각에 대해 훈련, 검증 및 테스트 샘플을 얻으려고 하기에는 샘플 크기가 너무 작기 때문인지 궁금합니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
아니요, 라디오 버튼 선택에 대한 유효성 검사 열(홀드백 또는 홀드백 제외 등)을 선택했지만 열을 선택한 항목으로 캐스팅할 때 열 목록에 유효성 검사를 포함하는 것을 잊어버렸기 때문인 것 같습니다. 역할. 그것은 내 추측이지만, 그렇지 않은 경우에는 단계별 설명을 제공해야 할 수도 있습니다.
또한 발생한 몇 가지 다른 실수를 수정하기 위해 코드를 다소 업데이트했습니다. 내 코드에는 진행 창이 포함되어 있는데 여러분이 원하지 않을 것 같지만 어쨌든 소스 코드를 얻을 수 있도록 새 GenAt.jsl 파일을 첨부합니다. 저는 NN, 부스팅 트리, 랜덤 포레스트, XGBoost 등 모델링을 지원하기 위해 항상 이를 사용합니다. 마음에 들지만, 모델링 관점에서 수행 중인 작업과 다양한 플랫폼에서 수행할 수 있는 작업에 대한 지식/이해가 필요합니다.
이게 맞는지는 모르겠지만 링크 작동하겠지만 애드인 저장소에 사용하는 방법에 대한 설명을 작성해 보았습니다. 내 SAS 계정을 통해 해당 링크에 접속할 수 있다는 것을 알고 있지만 다른 사람도 접속할 수 있는지는 잘 모르겠습니다. 하지만 아직 저장소에는 공개되지 않았습니다.
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축안녕하세요!
6개월 만에 NN 작업으로 돌아왔는데, NN GUI를 실행하려고 할 때 다음과 같은 새로운 오류 메시지가 표시되는 것을 발견했습니다. "보내기에는 '목록' 평가에 액세스할 때 스크립트 가능한 개체가 필요합니다. {/ *###*/"확인"})." 이것이 JMP 15와 16 사이의 일부 변경 때문이라고 생각하시나요(예: 특정 JMP 15 스크립트를 JMP 16용으로 수정해야 합니까?)
Re: 여러 신경망 모델 구축그거 좋네! 게시하시면 알려주세요. 특히 이 데이터세트를 파악하는 초기 단계에 있기 때문에 꼭 시도해 볼 것입니다(물론 NN이 JMP Pro 16에서 테스트한 다른 모든 모델 유형에 비해 확실한 승자였습니다). 나는 당신이 언급한 이유와 응답 변수 감소에 적합하지 않기 때문에 NN으로 직접 이동하지 않는 것의 가치를 봅니다. 제 경우에는 모든 샘플에서 동일한 30-40개 단백질 세트를 반복적으로 측정해야 합니다(당신이 지적한 대로 누락된 데이터 없음). 이로 인해 보다 전통적인 후보 바이오마커 접근 방식(하나의 또는 단지 몇 가지 예측 변수). 그래서 저는 기본적으로 몇 가지 바이오마커(일반적으로 Gen-reg 사용)를 사용하여 간단하고 제거된 모델을 만들고 이를 스크립트의 최적화된 NN 모델과 비교합니다. 이 경우 NN이 더 우수하지만, 항상 내가 수집할 모든 미래 데이터세트에서 나올 것이라는 뜻은 아닙니다! GUI, 버그 등을 시험해 볼 수 있기를 기대합니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
지나치게 복잡한 모델이 없다는 점에 대해서는 확실히 동의합니다. 절대 피해야 할 문제입니다.
제가 생각하는 바는 NN 모델링이 다른 플랫폼과 크게 다르지 않다는 것입니다. 각각의 장점과 단점이 있습니다. 예를 들어, NN은 누락된 데이터를 처리하는 데 그다지 능숙하지 않고, 계산적으로 확장성이 뛰어나지 않으며, 해석하기가 매우 어렵습니다. 이론 구축을 돕기 위해 그러한 모델을 사용하는 사람들에게는 그러한 해석이 중요합니다. 또한 NN은 모든 유형의 데이터 세트나 관련 없는 입력을 처리할 수 없습니다. 그러나 모델에 가정이 들어가지 않으며 예측 능력이 높은 경향이 있습니다.
그러나 각 모델링 방법에는 서로 다른 장점/단점이 있기 때문에 저는 다양한 플랫폼에 걸쳐 모델링한 다음 새로운 데이터 세트에서 각 플랫폼의 가장 좋은 모델을 서로 비교하여 어떤 모델이 예측에 가장 적합한지 확인하는 경향이 있습니다. 새로운 데이터 세트를 만들고 그 데이터 세트를 사용하세요.
즉, JMP 메뉴 핫 버튼(데이터 테이블 내에서만 실행되는 것이 아님)에서 실행할 수 있는 GUI 인터페이스 버전 1.0을 방금 완료했습니다. 데이터 테이블과 튜닝 테이블을 제공하고 선택한 네 가지 방법(NN, 부스트된 트리, 부트스트랩 포리스트, XGBoost)에 따라 튜닝 테이블을 기반으로 보낸 맞춤 횟수를 실행합니다. 이는 Y 입력에 대한 다양한 데이터 유형과 다양한 검증 열 유형, 심지어 XGBoost 플랫폼에 대한 여러 검증 열에서도 작동합니다. 버그가 전혀 없는 것은 아니지만 NN 플랫폼용 첫 번째 GUI를 게시한 지 일주일 정도 만에 작동하게 되어 매우 기쁩니다. 이를 위해서는 사용자가 각 플랫폼과 기타 플랫폼별 요구 사항에 사용할 튜닝 테이블에 대한 지식이 필요합니다. 예를 들어 JMP의 부스팅 트리 플랫폼은 2수준 이상의 명목/순서 데이터에서는 작동하지 않는다는 점을 알아야 합니다( 최소한 JMP 15에서는) 또는 XGBoost 플랫폼이 여러 검증 열을 사용할 수 있지만 각 열은 2레벨이어야 합니다.
이 프로젝트를 진행하는 것은 즐거웠고 앞으로의 노력에 도움이 될 것입니다. 감사해요!
행운을 빌어요,
DS
Re: 여러 신경망 모델 구축나는 이것의 일부가 많은 모델링 유형의 경우 점점 더 복잡한 모델을 구축하는 것이 원하는 것이 아니라는 사실과 관련이 있을 수 있다고 생각합니다. 간단한 모델이 데이터에 잘 맞고 검증 또는 테스트 RSME 값이 다음과 같은 경우 낮으면 거기서 멈추세요. 그러나 NN의 경우 레이어, 노드, 부스트, 투어 등을 추가하는 것이 반드시 나쁜 것은 아닙니다. 더 복잡하지만 더 유연하기 때문입니다. 따라서 저는 모든 모델링 플랫폼에 대해 이 GUI를 사용하면 모델링에 익숙하지 않은 사람들이 본질적으로 철저한 데이터 마이닝을 수행하여 해를 끼칠 수 있는 이유를 알 수 있습니다. 하지만 NN에 대한 나의 제한된 이해에 따르면, 한 모델이 TanH=3의 기본 조건에서 괜찮은 검증 RSME를 갖고 있고, 또 다른 모델은 두 개의 숨겨진 레이어에 걸쳐 3개의 TanH, 3개의 선형 및 3개의 가우스 노드를 갖고 있지만 유사한 RSME를 갖고 있다면, 더 복잡하지만 RSME 측면에서 동등하게 적합하다는 이유로 후자 모델을 자동으로 거부하지 않을 것입니다. 이는 결국 향후 테스트 데이터 세트에 더 유연해질 수 있기 때문입니다. 따라서 대부분의 사람들은 잠재적으로 수백에서 수천 개의 NN 모델을 구축하는 것이 좋습니다. 하지만 제가 틀렸다는 것은 전적으로 가능하며 NN은 다른 모든 모델링 유형과 다르지 않습니다. 다른 모든 것이 동일하면 단순함이 더 좋습니다. 나는 왜 더 많은 사람들이 NN 입력 매개변수를 최적화하려고 시도하는 것을 볼 수 없는지에 대해 불평하고 있습니다. 데이터 마이닝에 대한 무지 또는 두려움 때문입니까?!
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
귀하의 피드백과 친절한 말에 감사드립니다. 예, 저도 그 문제가 있었습니다. "최상위"가 아닌 경우 잘못된 데이터 테이블을 가져오는 문제였습니다. 왜 그런 일을 하는지 전혀 모르겠습니다. 나중에 맞는 부분으로 전달하기 위해 새 창에서 특정 항목을 호출할 때 응답하는 방식에 대해 뭔가 펑키한 부분도 있습니다. "취소" 버튼이 의도한 대로 작동하지 않고 "도움말" 버튼도 지금은 아무데도 가지 않지만 시작입니다! 스크립팅 전문가라면 이러한 버그를 쉽게 수정하고 의도한 대로 작동하도록 할 수 있을 것이라고 생각합니다. 아마도 더 많은 플랫폼에서 실행되고 버그가 없도록 설정을 완료하면 추가 기능 페이지에 게시할 수 있을 것입니다. JMP에 통합되면 영광이겠습니다.
모델 조정 프로세스를 더욱 자동화하고 단순화할 수 있으므로 작업에 도움이 됩니다. 저는 NN 플랫폼을 위해 뭔가를 하고 싶었지만 귀하의 게시물까지 미루고 있었습니다. 이제 GUI를 만들었으므로 이를 확장하여 보다 다양한 기능을 구현하고 싶습니다. 대규모 모델 세트를 조정하고 통계에만 집중할 수 있는 기능은 하이퍼파라미터 공간을 좁히는 데 도움이 되므로 다양한 플랫폼의 모델을 더 쉽게 비교하고 새로운 데이터를 예측하는 데 가장 적합한 모델을 확인할 수 있습니다. 그런 다음 다시 돌아가서 표준 플랫폼에서 최적의 설정을 실행하고 모델 및 기타 모든 항목을 시각화하기 위해 JMP가 제공하는 풍부한 그래픽 피드백을 모두 얻을 수 있습니다.
행운을 빌어요!,
DS
Re: 여러 신경망 모델 구축우와! 이제 이것은 정말 훌륭합니다. 유일한 약간의 결함은 스크립트 창이 "튜닝" 테이블 바로 위에 있는 경우 데이터 테이블 대신 모델 창에서 튜닝 테이블을 "호출"한다는 것입니다. 데이터 테이블과 스크립트가 화면 맨 앞에 있으면 모델 항이 올바르게 로드됩니다. 실제로 저는 단 몇 분 만에 100개의 모델을 실행했습니다. 이 내용을 JMP 웹사이트의 "추가 기능" 저장소(실제 이름은 잊어버렸음)에 올려서 더 많은 관심을 받을 수 있는지 궁금합니다. 나는 이것이 많은 사람들에게 도움이 될 것이라고 확신합니다(즉각적이지는 않더라도 앞으로는 모델 구축에서 NN의 유용성을 더 많이 보게 될 것입니다). 도대체 어떤 형태로든 JMP Pro 17에 적용되어야 할 것입니다(16에는 너무 늦을 수도 있습니다). 모든 도움에 진심으로 감사드리며, 이것이 귀하의 연구에도 도움이 되기를 바랍니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
JMP 및/또는 컴퓨터 재설정이 효과가 있었으면 좋겠습니다. 그렇지 않다면 다시 돌아가서 NN 모델링을 위한 GUI를 구축했습니다. 이를 다른 플랫폼에서 작동하도록 확장할 계획입니다. 완벽하게 작동하지 않으며 때때로 이상한 오류가 발생합니다(전문 스크립터는 아마도 몇 초 안에 디버깅할 수 있습니다). 그러나 좋은 점은 순서형, 명목형, 연속형 등 모든 유형의 입력 데이터 열에서 작동하고 제외된 행, 홀드백, Kfold 및 유효성 검사 열 등 NN에 허용되는 유효성 검사 방법과 함께 작동한다는 것입니다. 테스트 데이터가 있는 유효성 검사 열과 그렇지 않은 유효성 검사 열 모두에서 작동합니다. 데이터 테이블(첨부)에 있는 NN GUI라는 스크립트입니다.
관심이 있으신 분들을 위해 JMP 직원의 블로그를 많이 빌려봤습니다. .@juliagong (은퇴) 여기 그리고 님의 지원 메모 .@Wendy_Murphrey 여기 . 데이터 테이블 내에서 자동화한 다른 플랫폼(부스트 트리, 부트스트랩 포리스트 및 XGBoost)에 대해 이를 자동화할 수 있는 GUI를 만들 계획입니다. 커뮤니티에 게시할 계획이지만 시간이 좀 걸릴 수 있습니다. 특히 완전히 디버깅되었는지 확인하는 데 시간이 걸릴 수 있습니다.
아래 코드에서 데이터 테이블의 GUI에 대한 유일한 변경 사항은 dt = Data Table ("...")을 dt = Current Data Table()로 변경하는 것입니다.
이것이 귀하의 업무 진행에 도움이 되기를 바랍니다. 모델링 작업을 더 쉽게 만들기 위해 이 기능을 개선할 수 있으므로 나에게도 도움이 됩니다!
행운을 빌어요,
DS
NN GUI 코드:
Names Default To Here( 1 );
//Clear Symbols();
dt = Data Table( "Neural networking Ofav 2017 dataset" );
dt_parms = Data Table( "NN Tuning 8" );
nc = N Col( dt );
dtp_name = dt_parms << get name;
dt_name = dt << get name;
valid_list = {"Excluded Rows Holdback", "Holdback", "KFold", "Validation Column"};
//the width of the column list box in pixels
lbWidth = 110;
/* Expression to clear all current settings */
clearRoles = Expr(
colListY << RemoveAll;
colListV << RemoveAll;
);
/* Expression to store the current settings in global variables */
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::vcolRecall = colListV << GetItems;
);
VmethodDlg = New Window( "Choose Validation Type",
<<RETURN result=""> 0,
VMeth_Insert = "Validation(" || ":" || validCol[1] || ")";
If(
coltype == "Ordinal",
set = 1;
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );,
coltype == "Nominal",
set = 2;
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );,
coltype == "Continuous",
set = 3;
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
dt_results << New Column( "SSE Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
);
);
If( VMeth == "Validation Column" & lvl == 0,
VMeth_Insert = "Validation(" || ":" || validCol[1] || ")";
If(
coltype == "Ordinal",
set = 1;
o_box = 3;
ncol_box_v = 10;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );,
coltype == "Nominal",
set = 2;
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );,
coltype == "Continuous",
set = 3;
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
);
);
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( response_col ),
X(
:OFA...22_c0_g2_i1.p1,
:OFA...47_c0_g1_i1.p1,
:OFA...73_c1_g1_i3.p1,
:OFA...72_c1_g1_i1.p1,
:OFA...5_c1_g2_i15.p1,
:OFA...78_c2_g1_i3.p1,
:OFA...51_c4_g1_i1.p1,
:OFA...38_c0_g1_i8.p1,
:OFA...19_c0_g1_i1.p1,
:OFA...22_c2_g1_i4.p1,
:OFA...27_c1_g3_i5.p1,
:OFA...82_c3_g2_i3.p1,
:OFA...11_c1_g1_i7.p1,
:OFA...50_c2_g4_i1.p3,
:OFA...18_c1_g1_i7.p1,
:OFA...66_c2_g1_i3.p1,
:OFA...85_c0_g1_i2.p1,
:OFA...99_c5_g1_i6.p1,
:OFA...03_c2_g1_i1.p1,
:SYM...24_c0_g1_i1.p1,
:SYM...75_c0_g2_i1.p1,
:SYM...42_c0_g1_i1.p1,
:SYM...04_c0_g1_i1.p1,
:SYM...97_c0_g1_i1.p1,
:SYM...13_c0_g1_i1.p1,
:SYM...66_c0_g1_i1.p1,
:SYM...72_c0_g6_i1.p1,
:SYM...13_c0_g1_i1.p1 2,
:SYM...33_c0_g1_i1.p1 3,
:SYM...43_c0_g1_i1.p1,
:SYM...51_c0_g1_i1.p1,
:SYM...65_c0_g1_i1.p1 2
),
^VMeth_insert^,
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
),
Go,
invisible
)) << Report;"
);
Eval( Parse( str ) );
w = Window( dt_name || " - " || "Neural of " || y_resp[1] );
T_stats = w[Outline Box( o_box ), Number Col Box( 1 )] << Get;
V_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_v )] << Get;
If( VMeth == "Validation Column" & lvl > 0,
Test_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_test )] << Get
);
report << Close Window;
If( coltype == "Ordinal",
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
If( VMeth == "Validation Column" & lvl > 0,
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
);
If( coltype == "Nominal",
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
If( VMeth == "Validation Column" & lvl > 0,
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
);
If( coltype == "Continuous",
dt_results:R² Training[i] = T_stats[1];
dt_results:RMSE Training[i] = T_stats[2];
dt_results:Mean Abs Dev Training[i] = T_stats[3];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[4];
dt_results:SSE Training[i] = T_stats[5];
dt_results:Sum Freq Training[i] = T_stats[6];
dt_results:R² Validation[i] = V_stats[1];
dt_results:RMSE Validation[i] = V_stats[2];
dt_results:Mean Abs Dev Validation[i] = V_stats[3];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[4];
dt_results:SSE Validation[i] = V_stats[5];
dt_results:Sum Freq Validation[i] = V_stats[6];
If( VMeth == "Validation Column" & lvl > 0,
dt_results:R² Test[i] = Test_stats[1];
dt_results:RMSE Test[i] = Test_stats[2];
dt_results:Mean Abs Dev Test[i] = Test_stats[3];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[4];
dt_results:SSE Test[i] = Test_stats[5];
dt_results:Sum Freq Test[i] = Test_stats[6];
);
);
);</RETURN>Re: 여러 신경망 모델 구축흠, 새 테이블을 다운로드했는데 이제 매번 개요 상자 오류가 발생합니다. JMP 재부팅을 시도한 다음 컴퓨터를 재부팅해 보겠습니다. 그것이 당신 쪽에서는 작동하지만 내 쪽에서는 작동하지 않는다는 것이 이상해 보입니다!
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
수정하려고 했던 원본 글이 왠지 없어진 것 같아 다시 올립니다. 데이터 테이블을 공유해 주셔서 감사합니다. 문제를 해결하는 데 도움이 되었습니다.
어쨌든 몇 가지 사항을 변경했으므로 몇 가지 참고할 사항은 다음과 같습니다.
- Ordinal, Nominal, Continuous 모델링 유형에서 단일 코드를 실행할 수 있도록 만들었습니다. 두 가지 다른 버전은 더 이상 필요하지 않습니다.
- 따옴표 사이에 열 이름을 입력하여 Y 응답 열인 변수 y_resp를 편집해야 합니다(8행 참조). 더 이상 Neural() 내 호출에서 편집할 필요가 없습니다. 하지만 여전히 X() 목록을 편집해야 합니다.
- 그런 다음 코드는 y_resp 열의 모델링 유형을 테스트하고 일부 변수를 설정한 후 출력 데이터 테이블에 적절한 열을 생성합니다.
- 이제 출력 데이터 테이블에는 검증 유형 및 호스트 데이터 테이블에 따라 이름이 지정됩니다. 이렇게 하면 모든 검증 유형을 실행한 다음 JMP에서 이상한 이름 지정 문제 없이 비교할 수 있습니다.
- 데이터 테이블에 있는 다양한 유효성 검사 유형 스크립트를 각각 편집했으며 새 데이터 테이블에 쉽게 복사/붙여넣을 수 있습니다. 귀하가 보내주신 이전 테이블에서 이것을 테스트했는데 제대로 작동했습니다.
- 내 코드가 실행될 때마다 로그 파일에 기록하는 오류를 수정했으며 괄호를 새 위치로 이동해야 했습니다.
- 당신의 홀드백과 k-폴드가 실제로 올바르게 작동하지 않는 이유는 해당 유형을 수행할 때 Validation()을 Validation Method()로 변경해야 하기 때문이라는 것을 알았습니다. 나는 당신의 다른 방법에 대해 그것을 해왔고 스크립트는 수정되었습니다.
그래서 조금씩 나아지고 있어서 좋은 것 같아요. 추가 열을 생성하기 전에 응답 열 유형과 유효성 검사 방법을 테스트하도록 하고 싶지만 아직 어떻게 해야 할지 잘 모르겠습니다. 아마도 다음 출시를 위해 편집할 것입니다!
다음은 Kfold 유효성 검사에 대한 코드 예제입니다. 또한 수정된 스크립트가 저장된 새 데이터 테이블을 첨부했습니다.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning 8" );
dtp_name = dt_parms << get name;
dt_name = dt << get name;
//edit the line below so that it has the name of the column you want to model.
y_resp = "health designation";
response_col = Column( dt, Eval( Eval Expr( Expr( y_resp ) ) ) );
dt_results = dt_parms << Subset( Output Table( "Output of " || dtp_name || " with Kfold" || " for " || dt_name ), All rows, Selected Columns Only( 0 ) );
//This tests the response column type to automatically set the values for pulling the data out of the report window.
//It also will create the appropriate columns depending on the modeling type of the response column.
coltype = response_col << Get Modeling Type;
If( coltype == "Ordinal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
//dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
//dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
//dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
//dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
//dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//dt_results << New Column( "Sum Freq Test" );
);
If( coltype == "Nominal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
//dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
//dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
//dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
//dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
//dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//dt_results << New Column( "Sum Freq Test" );
);
If( coltype == "Continuous",
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
//dt_results << New Column( "R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
//dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
//dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
//dt_results << New Column( "SSE Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//dt_results << New Column( "Sum Freq Test" );
);
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( response_col ),
X(
:OFA...22_c0_g2_i1.p1,
:OFA...47_c0_g1_i1.p1,
:OFA...73_c1_g1_i3.p1,
:OFA...72_c1_g1_i1.p1,
:OFA...5_c1_g2_i15.p1,
:OFA...78_c2_g1_i3.p1,
:OFA...51_c4_g1_i1.p1,
:OFA...38_c0_g1_i8.p1,
:OFA...19_c0_g1_i1.p1,
:OFA...22_c2_g1_i4.p1,
:OFA...27_c1_g3_i5.p1,
:OFA...82_c3_g2_i3.p1,
:OFA...11_c1_g1_i7.p1,
:OFA...50_c2_g4_i1.p3,
:OFA...18_c1_g1_i7.p1,
:OFA...66_c2_g1_i3.p1,
:OFA...85_c0_g1_i2.p1,
:OFA...99_c5_g1_i6.p1,
:OFA...03_c2_g1_i1.p1,
:SYM...24_c0_g1_i1.p1,
:SYM...75_c0_g2_i1.p1,
:SYM...42_c0_g1_i1.p1,
:SYM...04_c0_g1_i1.p1,
:SYM...97_c0_g1_i1.p1,
:SYM...13_c0_g1_i1.p1,
:SYM...66_c0_g1_i1.p1,
:SYM...72_c0_g6_i1.p1,
:SYM...13_c0_g1_i1.p1 2,
:SYM...33_c0_g1_i1.p1 3,
:SYM...43_c0_g1_i1.p1,
:SYM...51_c0_g1_i1.p1,
:SYM...65_c0_g1_i1.p1 2
),
Validation Method ( \!"Kfold\!", 5 ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
),
Go,
invisible
)) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of " || y_resp );
T_stats = w[Outline Box( o_box ), Number Col Box( 1 )] << Get;
V_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_v )] << Get;
//Test_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
If( coltype == "Ordinal",
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
//dt_results:Generalized R² Test[i] = Test_stats[1];
//dt_results:Entropy R² Test[i] = Test_stats[2];
//dt_results:RMSE Test[i] = Test_stats[3];
//dt_results:Mean Abs Dev Test[i] = Test_stats[4];
//dt_results:Misclassification Rate Test[i] = Test_stats[5];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
//dt_results:Sum Freq Test[i] = Test_stats[7];
);
If( coltype == "Nominal",
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
//dt_results:Generalized R² Test[i] = Test_stats[1];
//dt_results:Entropy R² Test[i] = Test_stats[2];
//dt_results:RMSE Test[i] = Test_stats[3];
//dt_results:Mean Abs Dev Test[i] = Test_stats[4];
//dt_results:Misclassification Rate Test[i] = Test_stats[5];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
//dt_results:Sum Freq Test[i] = Test_stats[7];
);
If( coltype == "Continuous",
dt_results:R² Training[i] = T_stats[1];
dt_results:RMSE Training[i] = T_stats[2];
dt_results:Mean Abs Dev Training[i] = T_stats[3];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[4];
dt_results:SSE Training[i] = T_stats[5];
dt_results:Sum Freq Training[i] = T_stats[6];
dt_results:R² Validation[i] = V_stats[1];
dt_results:RMSE Validation[i] = V_stats[2];
dt_results:Mean Abs Dev Validation[i] = V_stats[3];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[4];
dt_results:SSE Validation[i] = V_stats[5];
dt_results:Sum Freq Validation[i] = V_stats[6];
//dt_results:R² Test[i] = Test_stats[1];
//dt_results:RMSE Test[i] = Test_stats[2];
//dt_results:Mean Abs Dev Test[i] = Test_stats[3];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[4];
//dt_results:SSE Test[i] = Test_stats[5]
//dt_results:Sum Freq Test[i] = Test_stats[6];
);
);
다른 문제를 발견하면 알려주시면 해결하도록 노력하겠습니다.
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
데이터 테이블을 공유해 주셔서 감사합니다. 몇 가지를 찾을 수 있었습니다.
- 로그 창에 계속 쓰는 오류의 위치를 찾아 수정했습니다. str 호출에 있습니다. 괄호를 다른 위치로 옮겨야 했습니다.
- K-fold나 Holdback을 할 때 Validation()을 Validation Method()로 변경해야 한다는 것을 알게 되었습니다. 그런 다음 작동하여 데이터의 비율을 적절하게 조정합니다.
- 기둥의 모델링 유형을 테스트하고 관련 변경 사항을 적용하는 방법을 기록했습니다.
- 명목형, 순서형, 연속형에도 같은 코드를 사용할 수 있도록 작성했습니다. 이는 Y 응답 열 이름인 y_resp 변수를 변경하여 간단하게 수행할 수 있습니다. 나머지는 모두 자동으로 수행됩니다.
- 또한 "호스트" 데이터 테이블과 검증 유형에 따라 변경되는 결과 데이터 테이블에 제목을 추가하여 세 가지 방법을 모두 실행할 수 있고 JMP의 이름 지정 간섭이 없습니다.
- 이제 데이터 테이블의 3개 NN 피팅 스크립트를 문제 없이 한 데이터 테이블에서 다음 데이터 테이블로 복사하여 붙여넣을 수 있습니다. 보내주신 첫 번째 데이터 테이블로 테스트해 보았는데 잘 작동했습니다.
이제 좀 더 자동화되고 조금 개선되었습니다. 유효성 검사 방법을 확인한 다음 추가 열을 생성하고 그에 따라 값을 할당하는 것을 선호합니다. 어쩌면 다음 출시에 있을 수도 있습니다!
코드의 일반적인 모습은 다음과 같습니다. 연속 모델링 유형을 확인하기 위해 온도 열을 테스트하고 있었습니다.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning 8" );
dtp_name = dt_parms << get name;
dt_name = dt << get name;
//edit the line below so that it has the name of the column you want to model.
y_resp = "temperature (1, 2, 3)";
response_col = Column( dt, Eval( Eval Expr( Expr( y_resp ) ) ) );
dt_results = dt_parms << Subset( Output Table( "Output of " || dtp_name || " with (validation type)" || " for " || dt_name), All rows, Selected Columns Only( 0 ) );
//This tests the response column type to automatically set the values for pulling the data out of the report window.
//It also will create the appropriate columns depending on the modeling type of the response column.
coltype = response_col << Get Modeling Type;
If( coltype == "Ordinal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
);
If( coltype == "Nominal",
o_box = 3;
ncol_box_v = 10;
ncol_box_test = 19;
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
);
If( coltype == "Continuous",
o_box = 3;
ncol_box_v = 2;
ncol_box_test = 3;
dt_results << New Column( "R² Training" );
dt_results << New Column( "R² Validation" );
dt_results << New Column( "R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "SSE Training" );
dt_results << New Column( "SSE Validation" );
dt_results << New Column( "SSE Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
);
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( response_col ),
X(
:OFA...22_c0_g2_i1.p1,
:OFA...47_c0_g1_i1.p1,
:OFA...73_c1_g1_i3.p1,
:OFA...72_c1_g1_i1.p1,
:OFA...5_c1_g2_i15.p1,
:OFA...78_c2_g1_i3.p1,
:OFA...51_c4_g1_i1.p1,
:OFA...38_c0_g1_i8.p1,
:OFA...19_c0_g1_i1.p1,
:OFA...22_c2_g1_i4.p1,
:OFA...27_c1_g3_i5.p1,
:OFA...82_c3_g2_i3.p1,
:OFA...11_c1_g1_i7.p1,
:OFA...50_c2_g4_i1.p3,
:OFA...18_c1_g1_i7.p1,
:OFA...66_c2_g1_i3.p1,
:OFA...85_c0_g1_i2.p1,
:OFA...99_c5_g1_i6.p1,
:OFA...03_c2_g1_i1.p1,
:SYM...24_c0_g1_i1.p1,
:SYM...75_c0_g2_i1.p1,
:SYM...42_c0_g1_i1.p1,
:SYM...04_c0_g1_i1.p1,
:SYM...97_c0_g1_i1.p1,
:SYM...13_c0_g1_i1.p1,
:SYM...66_c0_g1_i1.p1,
:SYM...72_c0_g6_i1.p1,
:SYM...13_c0_g1_i1.p1 2,
:SYM...33_c0_g1_i1.p1 3,
:SYM...43_c0_g1_i1.p1,
:SYM...51_c0_g1_i1.p1,
:SYM...65_c0_g1_i1.p1 2
),
Validation ( :Validation with test ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
),
Go,
invisible
)) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of " || y_resp );
T_stats = w[Outline Box( o_box ), Number Col Box( 1 )] << Get;
V_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_v )] << Get;
Test_stats = w[Outline Box( o_box ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
If( coltype == "Ordinal",
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
If( coltype == "Nominal",
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
If( coltype == "Continuous",
dt_results:R² Training[i] = T_stats[1];
dt_results:RMSE Training[i] = T_stats[2];
dt_results:Mean Abs Dev Training[i] = T_stats[3];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[4];
dt_results:SSE Training[i] = T_stats[5];
dt_results:Sum Freq Training[i] = T_stats[6];
dt_results:R² Validation[i] = V_stats[1];
dt_results:RMSE Validation[i] = V_stats[2];
dt_results:Mean Abs Dev Validation[i] = V_stats[3];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[4];
dt_results:SSE Validation[i] = V_stats[5];
dt_results:Sum Freq Validation[i] = V_stats[6];
dt_results:R² Test[i] = Test_stats[1];
dt_results:RMSE Test[i] = Test_stats[2];
dt_results:Mean Abs Dev Test[i] = Test_stats[3];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[4];
dt_results:SSE Test[i] = Test_stats[5];
dt_results:Sum Freq Test[i] = Test_stats[6];
);
);추가 문제가 있으면 알려주세요.
감사해요!,
DS
Re: 여러 신경망 모델 구축이상해요. 스크립트를 계속 실행하면 결국에는 작동할 것입니다!
또 다른 이상한 점은 홀드백 비율을 무엇으로 변경하더라도 항상 11개의 훈련과 9개의 검증(~55/45%)을 제공한다는 것입니다. 예를 들어 70/30%는 불가능합니까? 불가능하다기보다는 단순히 명령을 잘못 입력했기 때문이라는 강한 느낌이 듭니다!
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
개요 상자 오류는 아마도 NN 창에서 통계 값을 가져오려고 할 때 발생했을 것입니다. 새로운 데이터 테이블과 코드를 저와 공유해 주실 수 있나요? 문제를 해결하고 한 데이터 테이블에서 다른 데이터 테이블로 더 쉽게 이식할 수 있는지 확인할 수 있습니다.
데이터 열 유형을 확인하고 ncol_box 변수를 다른 값으로 만드는 부분을 어떻게 설정했는지와 관련이 있는 것 같습니다. 명목형인 경우 이 값은 순서형 또는 숫자형인 경우와 다릅니다.
이 오류가 발생한 데이터 테이블과 코드를 공유해 주시면 문제를 해결할 수 있다고 확신합니다. 원하는 경우 테이블 > 익명화를 통해 데이터 테이블을 익명화할 수 있습니다.
DS
Re: 여러 신경망 모델 구축큰 확인. 이것은 내가 가졌던 몇 가지 추가 질문에 대한 답변입니다. 이제 제가 겪고 있는 유일한 문제는 새 데이터 테이블에서 스크립트를 복사하고 붙여넣고 실행할 때 스크립트 주석에서 언급한 개요 상자 오류가 발생한다는 것입니다. "개요 상자에 액세스하거나 평가할 때 문자 인수 1이 필요합니다." 그게 무슨 뜻이야?? 숫자를 늘렸다 줄였지만 매번 같은 오류 메시지가 나오며 스크립트가 실행되지 않습니다. 나는 아웃라인 박스가 무엇인지조차 모른다. 트리 구조가 동일하다는 것이 이상합니다. 방금 파일명을 바꿨어요. 파일 이름이 더 깁니다. 어쩌면 더 큰 개요 상자가 필요하다는 뜻일까요?Re: 여러 신경망 모델 구축안녕 @abmayfield ,
돌아가서 스크립트를 검토하면 두 번째 줄은 분석 중에 사용할 데이터 테이블을 정의합니다. JSL 코드 dt = Current Data Table()은 이름으로 데이터 테이블을 호출하는 대신 스크립트의 나머지 부분에서 사용되는 지역 변수 "dt"를 정의합니다. 마찬가지로 dt_parms는 NN 튜닝 테이블 "NN Tuning"에 할당된 로컬 변수입니다. 이 두 테이블은 실제로 스크립트에 제공되는 유일한 항목입니다. 나머지는 모두 내부입니다.
JSL 코드를 새 데이터 테이블에 복사/붙여넣으면 해당 데이터 테이블에서 로컬로 실행되므로 자동으로 작동합니다.
Y() 및 X() 및 Validation() 메서드를 정의하는 경우를 제외하고는 dt << Nerual() 호출을 수정해서는 안 됩니다. JSL 코드 dt << Nerual()은 JMP에게 데이터 테이블 "dt"에 대해 NN 모델링을 수행하도록 지시하는 명령입니다. 따라서 코드 시작 부분에 dt가 무엇인지 정의합니다.
또한 NN 보고서 창의 제목과 그 아래의 Regex()를 반영하도록 w = Window() 호출을 수정해야 합니다. 마지막으로, 유효성 검사 열의 일부로 "테스트" 데이터 세트가 실제로 있는지 여부에 따라 주석을 달거나(줄 시작 부분에 // 명령 사용) 주석을 제거할 수 있습니다. 테스트 결과 열과 Test_stats 정의를 생성할 때 코드 시작 부분에 있고 코드가 결과를 새 출력 데이터 테이블에 쓰는 위치에 있습니다.
그 외에는 전혀 편집할 필요가 없습니다.
마지막 질문은 코드 구현 방법에 따라 다릅니다. 데이터 테이블 내에서 실행하는 경우, 즉 데이터 테이블의 스크립트 부분에 저장되어 있고 녹색 핫 버튼을 통해 실행하는 경우 Y() 및 X( )를 새 데이터 테이블의 열 이름과 일치시키기 위한 예측 변수 및 응답으로 사용하고 있습니다. 물론 "NN 튜닝" 테이블을 열어야 합니다. 반면에 이를 별도의 스크립트로 실행하는 경우 dt = Current Data Table()에서 dt = Data Table(" ")로 dt의 정의를 변경하고 싶을 수 있습니다. 따옴표 사이에 새 데이터 테이블의 이름을 입력합니다.
당신이 말하는 "신경망"은 데이터 테이블이 아니라 지정된 데이터 테이블에서 신경망 모델을 실행하는 JMP 명령입니다. "<<" 명령은 왼쪽 개체에 대해 << 오른쪽에 있는 작업을 수행한다는 의미입니다. 코드 시작 부분에서 새 열 명령을 사용하여 이를 확인할 수 있습니다. dt_results << New Column()이라고 표시된 코드는 dt_parms 데이터 테이블에서 생성된 하위 집합 데이터인 dt_results 개체에 대한 새 열을 생성하도록 JMP에 지시합니다.
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축(간단한) 스크립팅 질문이 있습니다. 입력 dt를 다른 것으로 변경하고 싶다고 가정해 보겠습니다. 스크립트를 복사하여 붙여넣고 "Neural"의 dt를 다른 것으로 대체하면 안 되나요?
str = Eval Insert(
"report = (dt << Neural (
Y( :health designation ),
X(
원본 "신경망" 파일을 삭제하고 정확히 동일한 정보와 다른 이름을 가진 다른 테이블로 대체하면 스크립트가 작동하지 않습니다! 두 개의 데이터 테이블(그 중 하나는 "신경망"이라는 이름)에 정확히 동일한 데이터가 있어야 합니까? 아마 제가 그 부분을 놓쳤던 것 같아요!
Re: 여러 신경망 모델 구축효과가 있어서 다행입니다. 모델링에 행운을 빕니다! 다른 모델 플랫폼도 확인한 다음 테스트 데이터 세트의 모델을 비교하여 어느 것이 가장 좋은 예측 변수인지 확인할 수 있습니다.
DSRe: 여러 신경망 모델 구축와, 여러분의 스크립팅 도움 덕분에 점심 식사 전에 300개의 신경망 모델을 실행했다는 것이 믿겨지지 않습니다. 점점 더 많은 사람들이 NN 플랫폼의 가치를 보기 시작할 때, 특히 이것이 완전히 새로운 데이터 세트이고 실제로는 그렇지 않은 경우 이와 같은 것에 끌릴 것이라고 상상하는 것처럼 이것이 선택되고 "칭찬"되기를 바랍니다. 약간 조정할 수 있는 어리둥절한 양의 NN 모델 입력 매개변수와 관련하여 "다이브"할 위치를 알 수 있습니다(때로는 학습률을 0.05에서 0.1로 늘리는 경우에도 큰 차이가 발생하는 경우가 있음). 다음에는 다양한 검증 접근 방식(검증 열, 홀드백, KFold)을 시도해 보겠습니다. 내 (현재) 작은 샘플 크기를 고려하면 확실히 주의해야 합니다(이러한 예비 데이터를 사용하여 더 많은 "행", 즉 산호를 추가하기 위한 자금을 얻기를 희망함).
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
Kfold는 또한 짧은 데이터 세트를 검증하는 또 다른 좋은 방법입니다. 예, 행 제외는 행 상태로 설정합니다. 이는 "테스트" 데이터 세트를 선택하고 행 상태를 "제외됨"으로 설정하여 수행할 수 있습니다. Kfold 또는 Holdback을 사용하는 경우 JMP는 데이터 테스트가 아닌 데이터 검증을 위해 이를 사용합니다. 또한 훈련 및 검증 데이터와 동일한 데이터 테이블에 포함하지 않고 테스트 데이터로 사용할 수 있는 별도의 데이터 세트가 있기를 바랍니다.
검증을 위해 Kfold를 사용한 다음 스크립트를 실행할 필요가 없는 부분을 주석 처리하겠습니다. 다음은 NN 플랫폼에 대한 5-Kfold 유효성 검사 설정이 포함된 편집된 버전입니다.효과가 있어야 합니다. 나에게는 그랬습니다.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
//dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
//dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
//dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
//dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
//dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
//dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(:OFA...22_c0_g2_i1.p1 ),
Validation ( \!"KFold\!", 5 ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
//ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
//Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
//dt_results:Generalized R² Test[i] = Test_stats[1];
//dt_results:Entropy R² Test[i] = Test_stats[2];
//dt_results:RMSE Test[i] = Test_stats[3];
//dt_results:Mean Abs Dev Test[i] = Test_stats[4];
//dt_results:Misclassification Rate Test[i] = Test_stats[5];
//dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
//dt_results:Sum Freq Test[i] = Test_stats[7];
);
행운을 빌어요!,
DS
Re: 여러 신경망 모델 구축특히 검증 유형과 관련하여 더 훌륭한 제안이 있습니다. Neural이 홀드백, Kfold 또는 행 제외를 지원하는 것을 확인했습니다(따라서 제외할 행 몇 개를 무작위로 선택했을 것으로 추측됩니다). 유효성 검사 유형을 변경하기 위해 스크립트를 변경하고 싶은 경우 "Validation ( :Validation with test )" 줄만 변경하면 되나요? 그리고 보류된 샘플이 JMP의 관점에서 검증 샘플과 동일할까요? 그렇지 않은 경우 유효성 검사 열을 제거하거나 이름을 바꿔야 하며 테스트 열도 제거해야 합니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
문제가 해결되어서 다행입니다.
트리 기반 모델링(XGBoost, 부스팅 트리, 부트스트랩 포레스트)을 사용하면 JMP 내 튜닝 테이블 GUI를 쉽게 사용하여 많은 모델을 실행할 수 있습니다. 하지만 한 가지 단점은 RAM을 많이 잡아먹는다는 것입니다. 이런 방식으로 실행할 때 좋은 점은 수만 가지의 다양한 매개변수 설정을 실행할 수 있고 RAM을 많이 소모하지 않고 CPU만 소모한다는 것입니다. 저는 부트스트랩 포리스트(느림)를 사용하여 최대 40,000가지의 다양한 설정을 실행했으며 업무용 노트북(32GB RAM 및 2GHz CPU)에서는 며칠이 걸릴 수 있습니다.
저는 또한 JMP 16의 얼리 어답터입니다. 모델 선별은 훌륭하지만 지적하신 것처럼 모델을 조정하는 것이 아니므로 약간 오해의 소지가 있을 수 있습니다. 예측 모델을 생성하는 데 항상 최상의 설정은 아닌 기본 설정을 사용합니다. 최소한 어떤 플랫폼을 추가로 조정하는 데 시간을 투자할 가치가 있고 어떤 플랫폼을 조사할 가치가 없는지 결정하는 데 도움이 될 수 있습니다.
명목 데이터를 모델링하기 위해 SVM 플랫폼을 고려할 수도 있습니다. 이는 해당 종류의 데이터에 대한 좋은 방법이기도 하기 때문입니다.
시뮬레이터의 경우 이는 뭔가 다르며 다양한 초기 조건(무작위화)으로 추정치를 테스트하는 방법을 의미합니다. 이는 추정값의 분포를 제공하고 원래 추정값에 대한 신뢰 구간을 제공하며 주어진 추정값을 사용하는 모델이 좋은지 여부를 결정할 수 있습니다.
DOE의 경우 요인을 적절하게 설정하여 계승을 수행하거나 공간 채우기 설계로 실행할 수도 있으며 플랫폼도 조건부 제약을 허용한다고 생각합니다. 또한 실제로 89개가 모두 필요한지 또는 실제로 더 작은 하위 집합만 사용할 수 있는지 확인하기 위해 예측 변수 스크리닝 또는 예측 변수에 대한 부트스트래핑을 수행하는 것을 고려할 수도 있습니다.
마지막으로, 짧고 넓은 데이터 테이블이 있으므로 유효성 검사 열을 사용하는 대신 하나를 남기고 유효성 검사를 수행하는 방법을 고려할 수 있습니다. 그렇게 하려면 해당 스크립트를 편집해야 합니다.
행운을 빌어요!,
DS
Re: 여러 신경망 모델 구축아하! 저를 위해 다시 해주셔서 정말 감사드립니다. 나는 분명히 스크립팅에 대한 지식이 없기 때문에 "Neural"을 내 데이터 테이블의 이름으로 변경했습니다. 이는 분명히 작동하지 않을 것입니다. 데이터 테이블의 이름을 "Neural"로 변경하고 테스트 열을 추가하고 권장되는 다른 변경 사항을 적용한 후에는 효과가 있었습니다.
이제 내가 할 수 있는 일은 DOE를 사용하여 조건부 요인 설계를 만들고(당신이 언급한 것처럼 여러 숨겨진 레이어로 부스트할 수 없기 때문에) 작업 컴퓨터에서 수백 개의 모델을 실행하는 것입니다. -GB RAM 노트북).
귀하의 스크립트가 GUI 또는 추가 기능이 되어야 한다고 생각합니다(수취자가 있습니까?). 제가 베타 테스트 중인 JMP Pro 16에는 정말 훌륭한 "모델 스크리닝" 도구가 있지만 잠재적으로 수천 개의 모델 내에서 테스트하는 것이 아니라 모델링 유형(예: PLS 대 Gen-Reg)에 걸쳐 테스트한다고 생각합니다. 각 모델링 유형 내에 구축됩니다(그렇지 않으면 실행이 중단되지 않을 수 있음). 나는 "시뮬레이터"에 대해 들어봤지만 그것이 뭔가 다른 일을 하고 있다고 생각합니다(수많은 시뮬레이션 모델을 생성하지 않음). 물론 제가 틀렸을 수도 있습니다. 다시 한번 귀하의 도움에 진심으로 감사드립니다. 그러면 확실히 며칠의 시간이 절약될 것입니다!
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
데이터 테이블을 공유해 주셔서 감사합니다. 스크립트에서 변경한 내용을 디버깅하는 데 도움이 되었습니다.
내가 알아차린 몇 가지 사항은 다음과 같습니다.
- 기록하려는 "테스트" 데이터 세트 통계에 대한 추가 열을 추가해야 했습니다.
- 매개변수 테이블의 행 수인 imax에 대한 정의를 실수로 제거했습니다.
- 또한 실수로 스크립트에서 dt << Neural()이라고 표시된 NN 플랫폼에 대한 호출을 변경했습니다. 여기에서 데이터 테이블 "dt"에 대해 신경망 모델링을 수행하는 명령을 보냅니다. 당신은 그것을 다른 것으로 바꾸었습니다.
- 창 "w"의 정의에는 NN 창의 전체 이름이 있어야 하며, 단일 X만 실행하는 경우 JMP는 이를 창 이름의 일부로 입력하므로 두 창 모두에 있어야 합니다. GetName 명령과 그 아래의 IF 문. 하지만 이는 단일 X로 모델링할 때만 해당됩니다. 둘 이상을 사용하는 경우 창 이름이나 IF 문에 "by......"를 사용할 필요가 없습니다.
- 마지막 부분은 훈련, 검증 및 테스트 데이터에 대한 통계가 Number Col Box() 명령에서 올바르게 호출되는지 확인하는 것입니다.
아래 코드는 데이터 테이블에서 작동합니다(수정된 스크립트도 첨부됨). 앞서 제공한 NN Tuning table과 함께 작동합니다.
실제로 86개의 열을 모두 사용하려면 스크립트의 X(col1, col2,...) 부분에 수동으로 넣어야 합니다. 그런 다음 GetName 부분도 편집해야 합니다. 왜냐하면 여기에는 86개의 이름이 모두 포함되지 않고 응답 열이 있는 창 이름만 포함되기 때문입니다.
Names Default To Here( 1 );
dt = Current Data Table();
dt_parms = Data Table( "NN Tuning" );
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Generalized R² Test" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "Entropy R² Test" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "RMSE Test" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Mean Abs Dev Test" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "Misclassification Rate Test" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "-LogLiklihood Test" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
dt_results << New Column( "Sum Freq Test" );
imax = N Row( dt_parms );
For( i = 1, i <= imax, i++,
Nlayer = dt_parms:N_Layers[i];
If( dt_results:N_Layers[i] == 1,
dt_results:N_TanH_2[i] = 0;
dt_results:N_Linear_2[i] = 0;
dt_results:N_Gauss_2[i] = 0;
);
If( dt_results:N_Layers[i] == 2,
dt_results:N_Boosts[i] = 0;
dt_results:Learn_Rate[i] = 0.1;
);
NTH1 = dt_results:N_TanH_1[i];
NTH2 = dt_results:N_TanH_2[i];
NL1 = dt_results:N_Linear_1[i];
NL2 = dt_results:N_Linear_2[i];
NG1 = dt_results:N_Gauss_1[i];
NG2 = dt_results:N_Gauss_2[i];
Nboosts = dt_results:N_Boosts[i];
LR = dt_results:Learn_Rate[i];
TCov = dt_results:T_Cov[i];
RFit = dt_results:Robust_Fit[i];
PMethod = dt_results:Penalty_Method[i];
Ntours = dt_results:N_Tours[i];
str = Eval Insert(
"report = (dt << Neural(
Y( :health designation ),
X(
:OFA...22_c0_g2_i1.p1
),
Validation ( :Validation with test ),
Informative Missing(0),
Transform Covariates(^TCov^),
Fit(
NTanH(^NTH1^),
NLinear(^NL1^),
NGaussian(^NG1^),
NTanH2(^NTH2^),
NLinear2(^NL2^),
NGaussian2(^NG2^),
Transform Covariates(^TCov^),
Penalty Method(\!"PMethod\!"),
Number of Tours(^Ntours^),
N Boost(^Nboosts^),
Learning Rate(^LR^)
)),
Go,
invisible
) << Report;"
);
Eval( Parse( str ) );
w = Window( dt << GetName || " - " || "Neural of health designation by OFA...22_c0_g2_i1.p1" );
If( !Is Missing( Regex( w << Get Window Title, "health designation by OFA...22_c0_g2_i1.p1" ) ) == 1,
ncol_box_v = 10;
ncol_box_test =19;
);
T_stats = w[Outline Box( 3 ), Number Col Box( 1 )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
V_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_v )] << Get;//You might need to adjust the Outline Box () and Number Col Box() values depending on your tree structure
Test_stats = w[Outline Box( 3 ), Number Col Box( ncol_box_test )] << Get;
report << Close Window;
dt_results:Generalized R² Training[i] = T_stats[1];
dt_results:Entropy R² Training[i] = T_stats[2];
dt_results:RMSE Training[i] = T_stats[3];
dt_results:Mean Abs Dev Training[i] = T_stats[4];
dt_results:Misclassification Rate Training[i] = T_stats[5];
dt_results:Name( "-LogLiklihood Training" )[i] = T_stats[6];
dt_results:Sum Freq Training[i] = T_stats[7];
dt_results:Generalized R² Validation[i] = V_stats[1];
dt_results:Entropy R² Validation[i] = V_stats[2];
dt_results:RMSE Validation[i] = V_stats[3];
dt_results:Mean Abs Dev Validation[i] = V_stats[4];
dt_results:Misclassification Rate Validation[i] = V_stats[5];
dt_results:Name( "-LogLiklihood Validation" )[i] = V_stats[6];
dt_results:Sum Freq Validation[i] = V_stats[7];
dt_results:Generalized R² Test[i] = Test_stats[1];
dt_results:Entropy R² Test[i] = Test_stats[2];
dt_results:RMSE Test[i] = Test_stats[3];
dt_results:Mean Abs Dev Test[i] = Test_stats[4];
dt_results:Misclassification Rate Test[i] = Test_stats[5];
dt_results:Name( "-LogLiklihood Test" )[i] = Test_stats[6];
dt_results:Sum Freq Test[i] = Test_stats[7];
);
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축글쎄, 나는 실패했지만 아마도 작은 스크립트 실수 때문인 것 같습니다. 내 데이터(첨부됨)가 포함된 NN 튜닝 테이블을 사용하고 필요한 모든 업데이트를 수행했습니다(3개의 훈련+검증+테스트 샘플 사용). 마지막 스크립트("신경망 비교")를 실행하면 새 테이블이 생성되지만 분석은 실행되지 않습니다. 방금 몇 개의 X 용어를 포함했지만 실제로는 "표준화된 데이터" 그룹의 86개 열이 모두 포함됩니다. 디버거를 사용할 때 뭔가 문제가 발생하고 있다는 메시지가 나타납니다.
" 을 위한 ( 나는 = 1 , i <= imax, i++," 영역입니다. 나는 좀 더 유능한 스크립트 작성자가 아마도 몇 초 안에 문제를 찾을 수 있기를 바라고 추측하고 있습니다!
Re: 여러 신경망 모델 구축예! 이것이 바로 제가 원하는 것입니다. NN 플랫폼과 동기화되는 모든 NN 입력 매개변수(예: TanH 노드 수, 레이어 수 등)가 포함된 테이블입니다. 아직 시도하지 않았고 시간이 좀 걸릴 것이라고 생각하지만 작은 20 샘플 x 90 예측 변수 "연습" 데이터 세트를 사용하고 있으므로 가능할 수도 있습니다. 실제로 저는 활성화 유형과 노드 수(및 투어 수)가 실제로 RMSE를 낮추고 부스트가 별로 도움이 되지 않는다는 사실만 발견했습니다. 그러나 그럼에도 불구하고 이것은 내가 실행하려고 계획한 ~500개 모델을 모두 수행하는 것보다 훨씬 빠릅니다(고맙게도 4노드/활성화 유형 아래에 머물기를 원하기 때문에 어제 실행하려고 했던 것만큼 많지는 않습니다). 내일 시험해보고 모두에게 어떻게 되는지 알려 드리겠습니다.
Re: 여러 신경망 모델 구축안녕 @abmayfield ,
이것은 제가 한동안 스크립트를 작성하고 싶었던 것이었고 정말 재미있었습니다. 그리고 귀하의 게시물이 이를 추진하는 데 불을 붙였습니다. 감사합니다! NN 플랫폼은 초기 조건에 매우 민감하고 수동으로 수행하는 것이 다소 느리기 때문에 한동안 튜닝할 수 있는 방법을 갖고 싶었습니다.
그래서 다른 모델 플랫폼용으로 만든 일부 스크립트를 조정하여 부스팅 트리, 부트스트랩 포레스트, XGBoost 플랫폼과 같은 튜닝 프로세스를 자동화했습니다. 스크립트는 데이터 테이블에 저장되고 녹색 핫 버튼으로 실행됩니다.
여러분이 스크립팅에 대해 어느 정도 알고 있고 이러한 스크립트를 특정 상황/데이터 구조/열 이름 등에 맞게 적용할 위치를 알 수 있기를 바랍니다. 나는 각각의 더 큰 그룹에서 내가 무엇을 하고 있는지 설명하기 위해 몇 가지 의견을 입력했습니다. 두 개의 스크립트를 첨부합니다. 하나는 연속 Y용이고 다른 하나는 명목/서수 Y용입니다. 이에 따라 Number Col Box() 값이 변경되므로 출력 Y가 명목인지 순서인지 확인하기 위한 테스트를 포함해야 했습니다. 샘플 데이터의 Big Class Families.jmp 데이터 테이블을 테스트 데이터 세트로 사용했습니다. 또한 수치 NN 튜닝 또는 명목/순수 NN 튜닝을 사용하여 생성한 두 개의 출력 데이터 테이블도 포함합니다. :age, :weight:, :height를 사용하여 :sex에서 명목형을 수행한 다음 :age를 Ordinal에서 Continuous로 변경하고 연속 NN 튜닝을 위해 :weight 및 :sex를 사용하여 age를 모델링했습니다.적합성과 통계는 끔찍하지만 JSL이 작동하는지 여부를 확인하기 위한 목적으로만 사용됩니다. 또한 모든 것이 올바르게 작동하는지 확인하기 위해 :age를 기준으로 계층화하여 데이터 테이블에 :Validation 열을 추가했습니다.
다른 사람이 Y() 입력 열을 연속형, 명목형 또는 순서형 모델링 유형으로 테스트하도록 더 우아하게 스크립트를 작성한 다음 적절한 Number Col Box() 값을 삽입하여 데이터를 적절하게 추출할 수 있을 것이라고 확신합니다. 단일 JSL 코드.
dt << Nerual() 섹션에 대한 Y() 및 X() 입력과 보고서 창의 이름을 가져오는 부분(모델링 중인 변수의 이름을 따서 명명됨)을 편집해야 합니다.
NN 튜닝 테이블은 원칙적으로 하한 및 상한 설정을 원하는대로 설정하는 공간 채우기 DOE처럼 취급될 수 있습니다. 단, JMP에서는 1 또는 2만 허용하기 때문에 N_Layers는 1 또는 2만 될 수 있습니다. 레이어. Penalty_Method는 NN 플랫폼에서 유효한 옵션일 뿐이며 Transform Covariate 및 Robust Fit은 0 또는 1(off 또는 on)의 값만 취합니다. NN 튜닝 테이블도 포함되어 있습니다.
궁금한 점이 있으면 알려주세요.
명목/순수 모델링 유형에 대한 코드는 다음과 같습니다.
Names Default To Here( 1 );
dt = Data Table( "Big Class Families" );//enter the name of the current data table
dt_parms = Data Table( "NN Tuning" );//enter name of parameter data table for tuning the NN
dt_results = dt_parms << Subset( All rows, Selected Columns Only( 0 ) );//this copies the tuning table with all the different rows in it
//these commands create columns to record the fit results
dt_results << New Column( "Generalized R² Training" );
dt_results << New Column( "Generalized R² Validation" );
dt_results << New Column( "Entropy R² Training" );
dt_results << New Column( "Entropy R² Validation" );
dt_results << New Column( "RMSE Training" );
dt_results << New Column( "RMSE Validation" );
dt_results << New Column( "Mean Abs Dev Training" );
dt_results << New Column( "Mean Abs Dev Validation" );
dt_results << New Column( "Misclassification Rate Training" );
dt_results << New Column( "Misclassification Rate Validation" );
dt_results << New Column( "-LogLiklihood Training" );
dt_results << New Column( "-LogLiklihood Validation" );
dt_results << New Column( "Sum Freq Training" );
dt_results << New Column( "Sum Freq Validation" );
//This part just creates a separate modelling progress, delete if you don't want it.
i = 1;
imax = N Row( dt_parms );
dlgStatus = New Window( "Overall Modeling Progress",
V List Box(
Text Box( " Overall Modeling Progress ", <<SET font="" size=""></SET>
제가 이해하지 못하는 이상한 점 중 하나는 NN 플랫폼에서 로그 창을 실행할 때 생성한 로그 창에 대해 이러한 경고가 표시되지만 다른 플랫폼에서는 해당 창을 받은 적이 없다는 것입니다. 해당 경고의 출처를 따라갈 수는 없지만 여전히 올바르게 실행됩니다. 누군가 내 코드의 해당 부분을 고칠 수 있을까요?
예상치 못한 ",". 아마도 ")"가 누락되었을 수 있습니다.
"<<" 연산자에 대한 피연산자를 구문 분석하는 중입니다.
23행 10열: ))►,
마지막 참고 사항: 부스트나 투어 또는 전송 기능이 너무 많은 경우 모델링을 실행하는 데 매우 오랜 시간이 걸릴 수 있으므로 설정에 주의하세요. 너무 지나치지 않도록 조심하세요.
도움이 되었기를 바랍니다!,
DS
Re: 여러 신경망 모델 구축그런데 모든 관련 기능이 적극적으로 선택하는 기능과 동일한 정보를 표시하도록 하는 "옵션" 트릭은 실제로 Mac에서의 "명령" 트릭입니다(따라서 이전에는 작동하지 않았던 이유입니다).
Re: 여러 신경망 모델 구축마크, 제안해 주셔서 감사합니다. 두 번째 시도했는데 실패했어요. 다른 플랫폼의 "결합 테이블로 만들기" 옵션을 알고 있지만 어떤 이유로 신경 플랫폼에서 제외되었을 수도 있습니다. 이상하게도 옵션 키를 누른 채 항목을 선택하고 보고서의 모든 부분에 적용하는 "옵션" 트릭은 신경 플랫폼에서는 작동하지 않거나 작업 속도를 높일 수 있습니다.
RSME를 최소화하려는 목표로 신경망 매개변수(#노드, #투어 등)를 DOE의 X로 가질 수 있다면 좋을 것 같지만, 신경 모델 실행의 특정 상자에 있는 매개변수입니다. 정말 고급 스크립팅을 수행해야 하는데, 그럼에도 불구하고 DOE와 Neural이 제대로 통신할 수 있는지 확신할 수 없습니다. 그러나 이 스크린샷에 반영된 모델(총합의 하위 선택)을 기본적으로 실행하기 위해 신경 플랫폼을 얻을 수 있는 방법을 아는 사람이 있다면 크게 감사하겠습니다. 즉, 첫 번째 스크린샷 테이블의 값은 두 번째 스크린샷(예: 신경 모델 실행)의 적절한 입력 상자로 이동해야 합니다.
Re: 여러 신경망 모델 구축RMSE의 2차 모델에 맞게 더 적은 수의 수준으로 실험을 설계한 다음 해당 모델을 사용하여 설정을 최적화할 수 있습니다. 또한, 결과 테이블 중 하나를 마우스 오른쪽 버튼으로 클릭한 후 Make Into Combined Table(결합 테이블로 만들기)을 선택하면 각 모델을 차례로 만든 후 모든 결과를 한 번에 추출할 수 있습니다.