[태그:] python

  • exact p-value – Python 으로 구하기. normal distribution 구현

    exact p-value – Python 으로 구하기. normal distribution 구현

    잊어버리기 전에 다시 정리…

    python으로 normal distribution 공식과 공식을 통해 해당 값의 frequency를 구해봤다.

    공식을 변형해서,

    python으로 구현하면 다음과 같다.

    import math
    import numpy as np
    
    def normal_distribution(x , mean , standard_deviation):
        frequency = (1/(math.sqrt(np.pi*2)*standard_deviation)) * np.exp(-0.5*((x-mean)/standard_deviation)**2)
        return frequency

    z-score가 2.45가 나올 때 해당 frequency값을 구하면,

    z-score는 평균이 0이고, 표준편차가 1일 때를 기준으로 하기 때문에 다음과 같이 집어넣어서 구할 수 있다.

    normal_distribution(2.45, 0, 1)

    그럼 값은

    0.019837354391795313

    이 나오고,

    지난번 포스팅에서 “해당 값을 표준화 했더니 z값이 2.45, 해당 값이 일어날 확률이 p=.0142가 나왔다.”는

    -> “해당 값을 표준화 했더니 z값이 2.45, 해당 값이 일어날 확률이 p=.0198가 나왔다.”로 수정해야한다.

    뭔가 계속 찜찜해서 결국 직접 구해봤다.

    추가로,

    실제 랜덤 데이터로 생성해서 구현했다.

    random_number = np.random.normal(0, 1, 100000000)
    print(np.mean(random_number))
    print(np.std(random_number))

    1억 개 정도 normal distribution 정규 분포 형태의 랜덤 데이터를 만들어서 평균값과 표준 편차 값을 확인했다.

    1억개 정도 하니 평균은 0, 표준편차는 1에 가까운 값이 나온다. 소숫점 이하의 오차는 갯수가 클 수록 더 작아진다.

    import seaborn as sb
    from scipy.stats import norm
    
    pdf = norm.pdf(random_number , loc = 0 , scale = 1 )
    sb.lineplot(random_number, pdf , color = 'red')

    이건 1억개 정도 돌리려고 했는데 램 용량 부족으로 못돌려서 1만개 정도만 돌린 그래프,

    pdf는 Probability density function 으로 확률 밀도 함수를 구해서 그래프로 그린 것,

    plt로 그래프 그린다고 해도 동일함

    import matplotlib.pyplot as plt
    
    count, bins, ignored = plt.hist(random_number, 100, density=True)
    plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) * np.exp(-(bins-mu)**2 / (2 * sigma**2) ), linewidth=2, color='r')
    plt.show()

    여기에서 cdf 값, Cumulative distribution fuction으로.

    누적값으로 z값 2.45까지의 면적 값을 구해보면,

    # Library
    from matplotlib import pyplot as plt
    import numpy as np
    from scipy.stats import norm
    
    fig, ax = plt.subplots()
    
    # for distribution curve
    x= np.arange(-4,4,0.001)
    ax.plot(x, norm.pdf(x))
    
    ax.set_title("Normal distribution")
    ax.set_xlabel('x')
    ax.set_ylabel('pdf(x)')
    ax.grid(True)
    
    # for fill_between
    px=np.arange(-4, 2.45,0.01)
    ax.set_ylim(0,0.5)
    ax.fill_between(px,norm.pdf(px),alpha=0.5, color='g')
    
    # cdf(x) 값 구하기
    cdf_x = round(norm.cdf(x=2.45, loc=0, scale=1), 5)
    
    # for text
    ax.text(-1, 0.1, cdf_x, fontsize=20)
    plt.show()

    으로,

    z-score가 2.45를 기준으로 좌측 끝 부분부터 해당 값까지의 누적 면적 값… Cumulative 값은 0.993정도가 된다는 것을 추가로 확인했다.

  • M1 tensorflow와 keras 설치 실패

    M1 tensorflow와 keras 설치 실패

    이것은 실패 기록입니다. 실패 로그도 남깁니다.

    tensorflow와 keras는 m1 맥북에는 miniforge를 통해서 설치해야 하는 것 같다. 아직, miniforge로 못해보고 conda 로만 시도해봤는데

    tensorflow가 깔리지 않는다. conda install -c 설치채널이름 패키지이름 순으로 작성하면 윈도우는 되는 것 같다. 그런데

    맥북 터미널에서,

    conda install -c conda-forge tensorflow

    conda install -c conda-forge keras

    로 설치시도 했는데 m1 맥북엔 안 먹힘.

    tensorboard를 보기 위해서 직접 설치해보려고 했는데…

    miniforge로 설치하는 방법이 있다고 한다. 그건 나중에. 일단 코랩으로 해결했다.

  • Import Error) cannot import name ‘img_to_array’ from ‘keras.preprocessing.image’

    Import Error) cannot import name ‘img_to_array’ from ‘keras.preprocessing.image’

    현재 기준 2022.10월 말.

    2년 전에 작동되었던 tensor와 keras는 지금과 많이 다르다. 정말 빠르게 변하고 있다고 느낀다. 뭐가 조금만 해도 이미 옛날 버전이 되어 있다.

    텐서플로우와 케라스를 import 하는데 이전에 preprocessing에서 있던 게 지금은 utils에 있다.

    이미지를 행렬로 변환하고 로드하는 코드 에러나는 걸 수정했던 부분.

    ImportError: cannot import name ‘img_to_array’ from ‘keras.preprocessing.image’ (/usr/local/lib/python3.7/dist-packages/keras/preprocessing/image.py

    이 건 하단의 코드로 변경.

    # from keras.preprocessing.image import img_to_array, load_img
    from tensorflow.keras.utils import img_to_array, load_img

    다음으로 # tf.keras.applications.InceptionResNetV2

    공식 문서에서 tf.keras 어쩌구 되어 있는데 이 부분은 import tensorflow as tf로 불러오고 하는데 이상하게 코랩에서 에러가 나서 그냥

    tensorflow.keras.applications. ~ 로 수정했다.

    # from tensorflow.keras.applications.InceptionResNetV2 import InceptionResNetV2
    from tensorflow.keras.applications.inception_resnet_v2 import InceptionResNetV2, decode_predictions, preprocess_input

    코드 관련해서 공식 문서는 케라스 홈페이지에

    https://keras.io/api/applications/vgg/#vgg19-function

    에 들어가면 코드가 뜬다.

error: Content is protected !!