ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로지스틱 회귀
    ML 2022. 7. 14. 14:29
    반응형

    시험 공부 시간, 시험 합격 여부

    hours = [
        0.5, 0.75, 1., 1.25, 1.5, 1.75, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.25, 3.5,
        4., 4.25, 4.5, 4.75, 5., 5.5
    ]
    success = [0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]

    이런 데이터로 선형 회귀 후 0.5 이상일 때 합격한다라고 했을 때와
    로지스틱 회귀로 시그모이드 함수를 이용했을 때의 차이는 거의 없다. 

    만약 30시간을 학습한 친구가 합격했다면 어떻게 될까?
    공부를 많이 한 친구가 합격한다는 건 충분히 합리적인 일이다.
    이런 합리적인 데이터가 추가되었을 때 기존 분석이 흔들린다면 좋은 분석이라고 하기 어려울 것이다. 
    이런 케이스에서 선형회귀와 로지스틱 회귀의 차이를 알 수 있다. 

    선형 회귀

    from sklearn.linear_model import LinearRegression
    import pandas as pd
    import matplotlib.pyplot as plt
    
    hours = [
        0.5, 0.75, 1., 1.25, 1.5, 1.75, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.25, 3.5,
        4., 4.25, 4.5, 4.75, 5., 5.5
    ]
    success = [0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]
    df = pd.DataFrame({'hours': hours, 'success': success})
    
    # plt.scatter(hours, success)
    # plt.show()
    
    lr = LinearRegression()
    lr.fit(df.hours.to_frame(), df.success)
    
    print(lr.coef_, lr.intercept_)
    
    print(lr.predict([[3]]))  # [0.53877344]
    
    plt.scatter(hours, success)
    plt.grid()
    plt.plot(hours, lr.predict(df.hours.to_frame()))
    plt.show()

    from sklearn.linear_model import LinearRegression
    import pandas as pd
    import matplotlib.pyplot as plt
    
    hours = [
        0.5, 0.75, 1., 1.25, 1.5, 1.75, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.25, 3.5,
        4., 4.25, 4.5, 4.75, 5., 5.5, 30
    ]
    success = [0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]
    df = pd.DataFrame({'hours': hours, 'success': success})
    
    # plt.scatter(hours, success)
    # plt.show()
    
    lr = LinearRegression()
    lr.fit(df.hours.to_frame(), df.success)
    
    print(lr.coef_, lr.intercept_)
    
    print(lr.predict([[3]]))  # [0.49365327]
    
    plt.scatter(hours, success)
    plt.grid()
    plt.plot(hours, lr.predict(df.hours.to_frame()))
    plt.show()

    로지스틱 회귀

    from sklearn.linear_model import LogisticRegression
    import pandas as pd
    import matplotlib.pyplot as plt
    
    hours = [
        0.5, 0.75, 1., 1.25, 1.5, 1.75, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.25, 3.5,
        4., 4.25, 4.5, 4.75, 5., 5.5
    ]
    success = [0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]
    df = pd.DataFrame({'hours': hours, 'success': success})
    
    # plt.scatter(hours, success)
    # plt.show()
    
    lr = LogisticRegression()
    lr.fit(df.hours.to_frame(), df.success)
    
    print(lr.coef_, lr.intercept_)
    
    print(lr.predict([[3]]))  # [1]
    
    plt.scatter(hours, success)
    plt.grid()
    plt.plot(hours, lr.predict(df.hours.to_frame()))
    plt.show()

    from sklearn.linear_model import LogisticRegression
    import pandas as pd
    import matplotlib.pyplot as plt
    
    hours = [
        0.5, 0.75, 1., 1.25, 1.5, 1.75, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.25, 3.5,
        4., 4.25, 4.5, 4.75, 5., 5.5, 30
    ]
    success = [0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1]
    df = pd.DataFrame({'hours': hours, 'success': success})
    
    # plt.scatter(hours, success)
    # plt.show()
    
    lr = LogisticRegression()
    lr.fit(df.hours.to_frame(), df.success)
    
    print(lr.coef_, lr.intercept_)
    
    print(lr.predict([[3]]))  # [1]
    
    plt.scatter(hours, success)
    plt.grid()
    plt.plot(hours, lr.predict(df.hours.to_frame()))
    plt.show()

    반응형
Designed by Tistory.