-
반응형
시험 공부 시간, 시험 합격 여부
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()
반응형