데이터 테이블에 수식을 저장할 필요 없이 예측 수식 추출<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />저는 일반화된 선형 모델 세트를 데이터에 맞춘 다음 AIC 등을 추출하여 모델 평균화를 수행하는 스크립트를 작성하고 있습니다. JMP가 일반화 선형 모델의 설계 행렬에서 범주형 변수를 코딩하는 방식(JMP는 코너 포인트 코딩 대신 합-영 코딩을 사용함)으로 인해 보고된 추정 계수를 사용하여 예측을 평균화하는 것이 어렵습니다. 적합합니다(카테고리 중 하나는 표시되지 않으며 이를 다시 만들려면 광범위한 프로그래밍을 수행해야 합니다). 플랫폼의 예측 공식을 간단히 사용한 다음 하나의 큰 공식에서 이러한 예측에 모델 가중치를 적용하는 것이 가장 쉬운 것 같습니다.
그러나 제가 볼 수 있는 한, 각 모델의 데이터 테이블에 예측 공식을 저장해야 합니다. 그런 다음 공식을 추출하고 다음과 같은 내용을 사용하여 다른 곳에서 사용하기 위해 저장할 수 있습니다.
모델핏 << 예측 공식 ;
모델 예측 공식 = 숯 ( 열 ( 데이터 , "P(PA) 공식" ) << 수식 가져오기 ()) ;
여기서 "P(PA) 공식"은 예측 공식입니다. 그런 다음 요약 AIC 테이블에 모델 예측 공식(문자 형식)을 저장하고 결국 개별 공식의 가중 합계인 슈퍼 공식을 생성할 수 있습니다.
그러나 전체 데이터 테이블에 대해 예측이 계산되고 각 모델 적합에 대한 열을 추가 및 제거해야 하기 때문에 이로 인해 스크립트 속도가 상당히 느려집니다.
그렇다면 먼저 열을 데이터 테이블에 저장하고 JMP에서 실제로 계산을 수행하지 않고도 모형 적합에서 실제 예측 공식을 추출할 수 있는 방법이 있을까요?
감사해요
칼 슈바르츠
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.JMP Pro 13.0부터는 " 먼저 열을 데이터 테이블에 저장하고 JMP에서 실제로 계산을 수행하지 않고도 모형 적합에서 실제 예측 공식을 추출할 수 있습니까?" 이것이 바로 "예측 공식 게시"와 그 변형이 수행하는 작업입니다. 모형 적합에 의해 생성된 공식은 JMP 플랫폼이라는 새로운 JMP 플랫폼에 직접 저장됩니다. 포뮬러 디포 . 여기에서 이를 다른(호환되는) 테이블에 적용하고, 배포용 채점 코드(다양한 프로그래밍 언어로)를 생성하고, 프로파일러 및 모델 비교와 같은 JMP 플랫폼을 시작할 수 있습니다. 이 마지막 명령에는 앙상블 생성이라는 궁극적인 목표를 구현하는 모델 평균화 명령이 있습니다.
안타깝게도 사용 중인 일반화 선형 모델 플랫폼에는 게시 명령이 아직 추가되지 않았습니다. 그러나 신경망, 파티션, 표준 최소 제곱 등 다양한 예측 모델링 플랫폼에서 사용할 수 있습니다.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.예, dt를 평가하려면 그냥 그렇습니다.
dt; 또는 좀 더 고급스러워지고 싶다면 eval(dt);
open 함수는 몇 가지 다른 인수를 받아들일 수 있습니다. 많은 경우 인수의 순서는 중요하지 않습니다. 이 경우에는 중요합니다. 여기서는 사용하지 않은 세 번째 인수와 함께 특정 순서로 진행되어야 한다고 지정하지 않는 한 inset into는 함수의 인수 목록 끝에 추가됩니다.
정말 이상해 보일 수도 있지만 매우 편리합니다.
open 문을 표현식으로 래핑하면 평가 전에 인수를 추가하거나 제거할 수 있습니다.
insert into는 구문 분석해야 하는 문자열이 아니라는 점을 제외하고 본질적으로 ",invisible"을 추가합니다.
insert into는 약간 비틀어 invis의 내용을 추가합니다. 방금 invis를 삽입하면 평가된 invis가 삽입됩니다. 저는 원하지 않았기 때문에 invis를 "name expr"로 묶었습니다.name expr(invis)는 "보이지 않음"으로 평가되며 공통 항목을 구분 기호로 추가합니다. 따라서 name eval은 텍스트가 아닌 표현식의 텍스트를 추가합니다.불행히도 이것을 설명하려고 하면 할수록 상황은 더욱 악화됩니다.
JSL에서는 본질적으로 빈 함수의 표현식으로 시작하여 필요한 모든 부분으로 채울 수 있습니다.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.깔끔합니다... 하지만 'insert into'가 "invis" 표현식을 "dt" 표현식에 삽입할 위치를 어떻게 아는지 잘 모르겠습니다. 나는 Expr이 일종의 트리를 만드는 표현을 "parsea"라고 생각하고 "insert into"는 단순히 "invis" 인수를 트리의 다른 리프로 추가하는 표현이라고 생각합니까?
JMP에서 인수가 함수에 전달되는 방식을 충분히 이해하지 못했습니다. 나는 위치 또는 인수=값인 R 배경에서 왔으며 Open() 함수에서 Invisible과 같은 JMP 사용이 문자열이 아니기 때문에 약간 이상하다는 것을 알았습니다. 이런 방식으로 함수를 호출하는 방법에 대한 좋은 참고 자료가 있나요?
아직 시도하지는 않았지만 실제 데이터 테이블을 열려면 'dt' 표현식을 평가해야 한다고 가정합니다.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.약간 다르며 구문 분석이 없습니다.
성급한 = 1 ;
투명하다 = 만료 ( 보이지 않는 ) ; //이것은 문자열이나 목록이 아니며 평가되지 않습니다.
dt = 만료 ( 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ) ;
만약에 ( 성급한 == 1 , 나 삽입하다 ( dt , 이름 만료 ( 투명하다 ) ) ) ; //Name Expr을 사용하여 표현식의 기호를 평가하지 않고 반환합니다.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.제안해 주셔서 감사합니다... 나도 생각해 냈어
// 아래의 runsilent 플래그는 디버깅에 유용합니다. 모든 것을 표시하려면 0으로 설정하십시오. 1 조용히 달리다
성급한 = 0 ;
평가 ( 분석하다 ( "데이터 = 공개( \!"SPPI_ Data_JMP_Revised.jmp\!""|| 만약에 ( 성급한 , ",\!"보이지 않는\!"" , " " ) || ");" )) ;
참고: 호출 시 "빈" 인수가 발생하지 않도록 runsilent=0인 경우 작동하는 표현을 만들기 위해 ",invisible" 문자열에 쉼표를 포함해야 했습니다.
칼.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.Invisible은 키워드라 파라미터로 설정하기가 쉽지 않습니다.나는 보통 IF 문을 사용합니다.
내 배포판 = 기능 ({ dt , 안부 , doInvisible } , { 기본 로컬 } ,
만약에 ( doInvisible ,
dt << 분포 ( 보이지 않는 , 열 ( 평가 ( 안부 ) ) )
,
dt << 분포 ( 열 ( 평가 ( 안부 ) ) )
)
) ;
dt = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
내 배포판 ( dt , "키" , 1 ) ;
이를 매개변수로 설정하려면 명령을 문자열로 작성한 다음 구문 분석하고 실행할 수 있습니다.
내 배포판 = 기능 ({ dt , 안부 , doInvisible } , { 기본 로컬 } ,
만약에 ( doInvisible ,
예어 = "보이지 않는"
,
예어 = ""
) ;
평가 ( 구문 분석 ( 평가 삽입 ( "\[
dt << 분포( ^keyword^, 열( "^col^" ) )
]\" ))) ;
) ;
dt = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
내 배포판 ( dt , "키" , 1 ) ;
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.핏의 보고서는 화면에 전혀 나타나지 않지만 명시적으로 보고서를 숨기도록 설정한 적은 없습니다. 피팅을 실행하는 데 '보이지 않는' 옵션이 있는 것을 확인했습니다....
플랫폼 실행 시 보이지 않음 옵션을 지정하면 시간이 45초에서 30초로 줄어듭니다.
원본 데이터 테이블(예측 공식이 연속적으로 저장됨)이 표시되고 최종 요약 데이터 테이블(각 모델 적합의 결과가 연속적으로 추가됨)도 표시됩니다. 원래 데이터 테이블을 보이지 않게 만들려고 했더니 예측 열을 추가/제거하더라도 작업 속도가 정말 빨라졌습니다(이제 15초까지 단축됨).
최종 결과 테이블은 연속적으로 구성되어 행이 연속적으로 추가되는 것을 볼 수 있었습니다. 또한 이를 보이지 않게 만들고 시간을 다시 8초로 줄였습니다!
따라서 병목 현상은 CPU 시간의 기반이 되기보다는 화면 작업을 다루는 것으로 보입니다.
이제 수정된 타이밍(최종 속도 향상 스크립트)은 다음과 같습니다.
56% 모델 피팅
13% 모델 보고서 생성
12% 모델 보고서를 닫음(보이지 않는데도?)
내 로그를 보면 내 대사가
모델핏 << 예측 공식 ;
누락된 부울 연산자에 대한 경고 메시지를 트리거했습니다. 내가 그것을로 전환하면
모델핏 << 예측식(1) ;
경고 메시지 없이 스크립트가 여전히 잘 실행됩니다. 그러나 JSL 구문 참조 또는 스크립팅 가이드에서 어떤 문서를 찾을 수 없는 것 같습니다.
모델핏 << 예측식(0) ;
할것이다? 후자가 예측 공식을 평가하지 않는지 확인하기 위해 작은 스크립트를 작성해 보겠습니다.
이제 "보이지 않음" 옵션을 즉시 설정할 수 있도록 스크립트를 수정하려고 합니다. 나는 다음과 같은 것을하고 싶다
런타임=1;
data << open("어쩌고", if(자동 실행, "보이지 않음"));
하지만 JMP는 항상 그 지점에서 멈춥니다... "하드 와이어드" 코드 단어가 필요할 때 메시지를 동적으로 만드는 방법에 항상 문제가 있습니다. 책으로 돌아가서....
칼.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.타이밍과 관련하여 보고서 창을 '보이지 않게' 만들어 보셨나요? 이것이 위의 23% 수치에 영향을 미치는지 궁금합니다.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.이안과 데이브에게 감사드립니다. ShowProperties 트리 어디에서도 예측 수식을 찾을 수 없으므로 열 저장 작업에서 요청할 때까지 계산되지 않는 것 같습니다.
수식 평가를 억제하거나 억제하지 않고 스크립트를 시도했습니다. 공식을 억제하지 않고 45초가 걸렸습니다. 공식을 억제하면 44초가 걸렸습니다. 수식 평가가 실제 모델 피팅에 비해 많은 시간이 걸린다고 가정하고, 보고서에서 정보를 추출하고, 새로운(요약) 데이터 테이블에 정보를 저장하는 것은 착각이었던 것 같습니다.
스크립트를 프로파일링하려고 시도한 적은 없었습니다. 방금 이 작업을 수행했습니다. 결과는 다음과 같습니다
모델 피팅에 소요되는 시간의 11%
보고서 작성에 소요되는 시간의 13%
다음을 사용하여 예측을 위해 각 모델에 사용된 열을 삭제하는 데 47%의 시간이 소요되었습니다. data << delete columns("P(PA) 수식");
다음을 사용하여 보고서 창에서 정보를 추출한 후 보고서 창을 닫는 데 23%의 시간이 소요되었습니다. modelreport << 창 닫기;
나는 이것이 놀랍다는 것을 알았습니다!
칼
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.FWIW, Dave가 맞을 수도 있다고 생각합니다. '<< 추정치 가져오기' 및 '<< 분산 성분 가져오기' 메시지가 있지만 항상 사용할 수 있는 것은 아닙니다(적합의 특성에 따라 다름). 특정 경우에는 'ShowProperties()'를 사용해 볼 가치가 있습니다.
Re: 데이터 테이블에 수식을 저장하지 않고 예측 수식을 추출합니다.원하는 것을 할 수 있는 방법이 있는지 잘 모르겠습니다.내가 취하는 접근 방식은 예측 공식을 저장하기 전에 공식 평가를 억제하는 것입니다.
dt << 수식 평가 억제(1)