메뉴 건너뛰기

pds

expectation maximazation

박영식2008.09.20 11:59조회 수 8626댓글 0

  • 1
    • 글자 크기
#include <stdio.h>

char    input_data[5][100] =
{   "HTTTHHTHTH",
    "HHHHTHHHHH",
    "HTHHHHHTHH",
    "HTHTTTHHTT",
    "THHHTHHHTH"};



int func_E_STEP( float possi_A, float possi_B, float *new_posii_A, float *new_posii_B)
{

    float   curValue_A = 0;
    float   curValue_B = 0;
    float   curPercent_A = 0;
    float   curPercent_B = 0;
    float   countHead_A = 0;
    float   countTail_A = 0;
    float   countHead_B = 0;
    float   countTail_B = 0;
    int     i, j;

    float   real_Head, real_Tail;

    for( i = 0 ; i < 5 ; i++ )
    {
        curValue_A = curValue_B = 1;
        real_Head = real_Tail = 0;

        for( j = 0 ; j < 10 ; j++ )
        {
            if( input_data[i][j] == 'H' )
            {
                curValue_A *= possi_A;
            }
            else
            {
                curValue_A *= (1-possi_A);
            }
        }

        for( j = 0 ; j < 10 ; j++ )
        {
            if( input_data[i][j] == 'H' )
            {
                curValue_B *= possi_B;
            }
            else
            {
                curValue_B *= (1-possi_B);
            }
        }

        for( j = 0 ; j < 10 ; j++ )

        {
            if( input_data[i][j] == 'H' )
            {
                real_Head++;
            }
            else
            {
                real_Tail++;
            }
        }

        curPercent_A = curValue_A / (curValue_A + curValue_B);
        curPercent_B = curValue_B / (curValue_A + curValue_B);


        countHead_A += curPercent_A * 10 * real_Head / 10;
        countTail_A += curPercent_A * 10 * real_Tail / 10;

        countHead_B += curPercent_B * 10 * real_Head / 10;
        countTail_B += curPercent_B * 10 * real_Tail / 10;

    }


    *new_posii_A = countHead_A / ( countHead_A + countTail_A );
    *new_posii_B = countHead_B / ( countHead_B + countTail_B );

    return 0;
}


int func_em_select( float possi_A, float possi_B )
{

    float   curValue_A = 0;
    float   curValue_B = 0;
    float   curPercent_A = 0;
    float   curPercent_B = 0;
    int     i, j;


    for( i = 0 ; i < 5 ; i++ )
    {
        curValue_A = curValue_B = 1;

        for( j = 0 ; j < 10 ; j++ )
        {
            if( input_data[i][j] == 'H' )
            {
                curValue_A *= possi_A;
            }
            else
            {
                curValue_A *= (1-possi_A);
            }
        }

        for( j = 0 ; j < 10 ; j++ )
        {
            if( input_data[i][j] == 'H' )
            {
                curValue_B *= possi_B;
            }
            else
            {
                curValue_B *= (1-possi_B);
            }
        }

        curPercent_A = curValue_A / (curValue_A + curValue_B);
        curPercent_B = curValue_B / (curValue_A + curValue_B);


        if( curPercent_A > curPercent_B )
        {
            fprintf( stdout, "%d:%s is A(%lf)n", i, input_data[i], curPercent_A );
        }
        else
        {
            fprintf( stdout, "%d:%s is B(%lf)n", i, input_data[i], curPercent_B );
        }

    }

    return 0;
}



int main()
{


    float   possi_A = 0.60;
    float   possi_B = 0.50;
    float   new_possi_A = 0;
    float   new_possi_B = 0;

    int     i;


    for( i = 0 ; i < 10 ; i++ )
    {

        func_E_STEP( possi_A, possi_B, &new_possi_A, &new_possi_B );


        fprintf( stdout, "(%d) A : %lf, B : %lfn", i,  new_possi_A, new_possi_B );

        // M STEP
        possi_A = new_possi_A;
        possi_B = new_possi_B;

    }


    func_em_select( possi_A, possi_B );



    return 0;
}
박영식 (비회원)
  • 1
    • 글자 크기

댓글 달기

번호 제목 글쓴이 날짜 조회 수
112 [CD] nrg -> iso 박영식 2009.07.31 9992
111 삼성 노트북 sens s820/s850 윈도우98 디스플레이 사운드 드라이버1 박영식 2009.08.03 9736
110 삼성 노트북 sens s820/s850 윈도우98 디스플레이 사운드 드라이버2 박영식 2009.08.03 9790
109 삼성 노트북 sens s820/s850 윈도우98 디스플레이 사운드 드라이버3 박영식 2009.08.03 10510
108 wma_mp3_converter(wma->mp3) 박영식 2009.08.03 12232
107 [OS] 윈도우 xp 설치를 위한 USB 부트용 프로그램 박영식 2009.08.08 9485
106 [문서] 생명보험 보험료 차등 혜택 박영식 2009.08.12 9108
105 [논문] 웹표준 준수와 다중 플랫폼 지원을 통한 웹사이트 관리 박영식 2009.08.12 10002
104 [메일서버] hMailServer-5.1.2-B346.exe 박영식 2009.08.23 12575
103 [크랙] Windows 7 professional k 인증 크랙 박영식 2009.09.06 22741
102 [크랙] Windows 7 professional k 인증 크랙(2) 박영식 2009.09.06 19485
101 [문서] 친일인명사전 명단 박영식 2009.11.14 8644
100 [서식] APA, MLA 포맷(기본형) 박영식 2009.11.14 13588
99 [자바] java decompiler (자바 디컴파일러) 박영식 2009.11.17 10214
98 [XE] 통계용 모듈과 플러그인 박영식 2010.01.12 9585
97 testdisk 파티션복구 프로그램 박영식 2010.01.21 9974
96 [기출문제] 정보처리기사 2005-4 ~2007~4 박영식 2010.04.02 9586
95 [폰트] 휴먼명조 유사체 박영식 2010.04.08 15444
94 [논문] 모바일 웹에서 제조사 및 원격 제어 앱 입력 식별에 관한 실증적 연구 suritam9 2020.10.19 86
93 정보처리기사 실기기출문제(2005-4~2009-2) 박영식 2010.05.19 12220
첨부 (1)
20022191_yeongsik_pak.tar.gz
2.5KB / Download 26
위로