Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

Python의 로지스틱 회귀에 대한 확실한 가이드

개요

가끔 헷갈려 선형 회귀 초보자 – 용어 공유로 인해 되돌아옴 - 로지스틱 회귀 와 거리가 멀다 선형 회귀. 선형 회귀는 2, 2.45, 6.77 또는 연속 값, 그것을 되돌아옴 연산, 로지스틱 회귀 0 또는 1, 1 또는 2 또는 3과 같은 값을 예측합니다. 이산 값, 그것을 분류 연산. 예, 호출됩니다 되돌아옴 하지만 분류 연산. 잠시 후에 자세히 알아보십시오.

따라서 데이터 과학 문제에 연속 값이 포함된 경우 다음을 적용할 수 있습니다. 되돌아옴 알고리즘(선형 회귀가 그 중 하나임). 그렇지 않고 입력, 이산 값 또는 클래스 분류와 관련된 경우 다음을 적용할 수 있습니다. 분류 알고리즘(로지스틱 회귀가 그 중 하나임).

이 가이드에서는 Scikit-Learn 라이브러리를 사용하여 Python에서 로지스틱 회귀를 수행합니다. 우리는 또한 그 단어가 왜 "회귀" 이름과 로지스틱 회귀가 작동하는 방식에 있습니다.

이를 위해 먼저 분류, 시각화 및 사전 처리될 데이터를 로드합니다. 그런 다음 해당 데이터를 이해할 수 있는 로지스틱 회귀 모델을 구축합니다. 그런 다음 이 모델을 평가하고 새로운 입력을 기반으로 값을 예측하는 데 사용합니다.

자극

당신이 일하는 회사는 터키 농업 농장과 파트너십을 맺었습니다. 이 파트너십에는 호박 씨앗 판매가 포함됩니다. 호박씨는 인간의 영양에 매우 중요합니다. 그들은 탄수화물, 지방, 단백질, 칼슘, 칼륨, 인, 마그네슘, 철 및 아연의 좋은 비율을 포함합니다.

데이터 과학 팀에서 귀하의 임무는 데이터를 사용하여 호박씨의 종류를 구별하는 것입니다. 분류 시드 유형에 따른 데이터.

터키 농장은 두 가지 호박 종자 유형을 사용합니다. 하나는 세르체벨릭 그리고 나머지 위르귀프 시브리시.

호박씨를 분류하기 위해 귀하의 팀은 2021년 논문을 따랐습니다. “호박씨 분류에 기계 학습 방법 사용(Cucurbita pepo L.). 유전자원과 작물의 진화” Koklu, Sarigil 및 Ozbek에서 – 이 논문에서는 이미지에서 종자 측정값을 사진으로 찍고 추출하는 방법론이 있습니다.

논문에 설명된 프로세스를 완료한 후 다음 측정값이 추출되었습니다.

  • Area - 호박씨 테두리 안의 픽셀 수
  • 둘레 – 호박씨의 둘레(픽셀 단위)
  • 장축 길이 - 호박씨의 둘레(픽셀 단위)
  • 보조 축 길이 – 호박씨의 작은 축 거리
  • 이심률 – 호박씨의 기이함
  • 볼록 영역 - 호박씨에 의해 형성된 영역에서 가장 작은 볼록 껍질의 픽셀 수
  • 범위 – 경계 상자 픽셀에 대한 호박 씨앗 면적의 비율
  • 등가 직경 - 호박씨 면적을 XNUMX로 나눈 곱의 제곱근을 파이로 나눈 값
  • 소형화 - 같은 둘레를 가진 원의 면적에 대한 호박씨 면적의 비율
  • 견고 – 호박씨의 볼록한 상태와 볼록한 상태
  • 진원도 – 가장자리 왜곡을 고려하지 않은 호박씨의 타원형
  • 화면 비율 – 호박씨의 종횡비

작업해야 하는 측정값입니다. 측정 외에도 클래스 두 종류의 호박씨에 대한 라벨.

시드 분류를 시작하려면 데이터를 가져와서 살펴보겠습니다.

데이터세트 이해하기

참고 : 호박 데이터 세트를 다운로드할 수 있습니다. 여기에서 지금 확인해 보세요..

데이터 세트를 다운로드한 후 다음을 사용하여 데이터 프레임 구조에 로드할 수 있습니다. pandas 도서관. 엑셀파일이기 때문에 read_excel() 방법:

import pandas as pd

fpath = 'dataset/pumpkin_seeds_dataset.xlsx' 
df = pd.read_excel(fpath)

데이터가 로드되면 head() 방법:

df.head() 

결과 :

	Area 	Perimeter 	Major_Axis_Length 	Minor_Axis_Length 	Convex_Area 	Equiv_Diameter 	Eccentricity 	Solidity 	Extent 	Roundness 	Aspect_Ration 	Compactness 	Class
0 	56276 	888.242 	326.1485 			220.2388 			56831 			267.6805 		0.7376 			0.9902 		0.7453 	0.8963 		1.4809 			0.8207 			Çerçevelik
1 	76631 	1068.146 	417.1932 			234.2289 			77280 			312.3614 		0.8275 			0.9916 		0.7151 	0.8440 		1.7811 			0.7487 			Çerçevelik
2 	71623 	1082.987 	435.8328 			211.0457 			72663 			301.9822 		0.8749 			0.9857 		0.7400 	0.7674 		2.0651 			0.6929 			Çerçevelik
3 	66458 	992.051 	381.5638 			222.5322 			67118 			290.8899 		0.8123 			0.9902 		0.7396 	0.8486 		1.7146 			0.7624 			Çerçevelik
4 	66107 	998.146 	383.8883 			220.4545 			67117 			290.1207 		0.8187 			0.9850 		0.6752 	0.8338 		1.7413 			0.7557 			Çerçevelik

여기 각 열에 모든 측정값이 있습니다. 풍모, 그리고 또한 클래스 칼럼, 우리 목표, 이는 데이터 프레임의 마지막 것입니다. 우리는 우리가 사용하여 얼마나 많은 측정을 볼 수 있습니다 shape 속성:

df.shape 

출력은 다음과 같습니다.

(2500, 13)

모양 결과는 데이터 세트에 2500개의 항목(또는 행)과 13개의 열이 있음을 알려줍니다. 하나의 대상 열이 있다는 것을 알고 있기 때문에 이는 12개의 기능 열이 있음을 의미합니다.

이제 대상 변수인 호박씨를 탐색할 수 있습니다. Class. 우리는 그 변수를 예측할 것이기 때문에 우리가 가지고 있는 각 호박씨 샘플의 수를 보는 것은 흥미로울 것입니다. 일반적으로 클래스의 인스턴스 수 간의 차이가 작을수록 샘플이 더 균형을 이루고 더 나은 예측이 가능합니다.

이 검사는 각 종자 샘플을 계수하여 수행할 수 있습니다. value_counts() 방법:

df['Class'].value_counts() 

위의 코드는 다음을 표시합니다.

Çerçevelik       1300
Ürgüp Sivrisi    1200
Name: Class, dtype: int64

1300개의 샘플이 있음을 알 수 있습니다. 세르체벨릭 종자 및 1200개의 샘플 위르귀프 시브리시 씨앗. 그들 사이의 차이는 100개의 샘플로 매우 작은 차이이며 이는 우리에게 좋으며 샘플 수를 재조정할 필요가 없음을 나타냅니다.

다음을 사용하여 기능에 대한 기술 통계도 살펴보겠습니다. describe() 데이터가 얼마나 잘 분포되어 있는지 확인하는 방법입니다. 우리는 또한 결과 테이블을 다음과 같이 바꿀 것입니다. T 통계 간 비교를 쉽게 하기 위해:

df.describe().T

결과 테이블은 다음과 같습니다.

					count 	mean 			std 			min 		25% 			50% 			75% 			max
Area 				2500.0 	80658.220800 	13664.510228 	47939.0000 	70765.000000 	79076.00000 	89757.500000 	136574.0000
Perimeter 			2500.0 	1130.279015 	109.256418 		868.4850 	1048.829750 	1123.67200 		1203.340500 	1559.4500
Major_Axis_Length 	2500.0 	456.601840 		56.235704 		320.8446 	414.957850 		449.49660 		492.737650 		661.9113
Minor_Axis_Length 	2500.0 	225.794921 		23.297245 		152.1718 	211.245925 		224.70310 		240.672875 		305.8180
Convex_Area 		2500.0 	81508.084400 	13764.092788 	48366.0000 	71512.000000 	79872.00000 	90797.750000 	138384.0000
Equiv_Diameter 		2500.0 	319.334230 		26.891920 		247.0584 	300.167975 		317.30535 		338.057375 		417.0029
Eccentricity 		2500.0 	0.860879 		0.045167 		0.4921 		0.831700 		0.86370 		0.897025 		0.9481
Solidity 			2500.0 	0.989492 		0.003494 		0.9186 		0.988300 		0.99030 		0.991500 		0.9944
Extent 				2500.0 	0.693205 		0.060914 		0.4680 		0.658900 		0.71305 		0.740225 		0.8296
Roundness 			2500.0 	0.791533 		0.055924 		0.5546 		0.751900 		0.79775 		0.834325 		0.9396
Aspect_Ration 		2500.0 	2.041702 		0.315997 		1.1487 		1.801050 		1.98420 		2.262075 		3.1444
Compactness 		2500.0 	0.704121 		0.053067 		0.5608 		0.663475 		0.70770 		0.743500 		0.9049

표를 보시면서 비교해보면 평균표준 편차 (std) 열을 보면 대부분의 특성이 표준편차에서 멀리 떨어져 있는 평균을 가짐을 알 수 있습니다. 이는 데이터 값이 평균 값 주위에 집중되어 있지 않고 그 주위에 더 흩어져 있음을 나타냅니다. 높은 변동성.

또한, 볼 때 최저한의 (min) and 최고 (max) 열, 다음과 같은 일부 기능 AreaConvex_Area, 최소값과 최대값의 차이가 큽니다. 이는 해당 열에 매우 작은 데이터와 매우 큰 데이터 값이 있음을 의미합니다. 더 높은 진폭 데이터 값 사이.

높은 변동성, 높은 진폭 및 측정 단위가 다른 특징을 통해 대부분의 데이터는 모든 특징에 대해 동일한 척도를 사용하거나 비늘이있는. 데이터 스케일링은 평균을 중심으로 데이터를 집중시키고 분산을 줄입니다.

이 시나리오는 데이터에 이상값과 극단값이 있음을 나타낼 수도 있습니다. 따라서 일부를 갖는 것이 가장 좋습니다. 이상치 처리 데이터를 확장하는 것 외에도.

예를 들어 다음과 같은 트리 기반 알고리즘과 같은 일부 기계 학습 알고리즘이 있습니다. 랜덤 포레스트 분류, 높은 데이터 분산, 이상값 및 극단값의 영향을 받지 않습니다. 로지스틱 회귀 다른 점은 값을 분류하는 함수를 기반으로 하며 해당 함수의 매개변수는 일반적인 데이터 추세를 벗어나 분산이 큰 값의 영향을 받을 수 있습니다.

로지스틱 회귀를 구현할 때 잠시 후에 로지스틱 회귀에 대해 더 많이 이해할 것입니다. 지금은 데이터를 계속 탐색할 수 있습니다.

참고 : 컴퓨터 공학에는 다음과 같은 유명한 말이 있습니다. “쓰레기 인, 가비지 아웃” (GIGO), 이는 기계 학습에 적합합니다. 이것은 우리가 가비지 데이터(그 자체로 현상을 설명하지 않는 측정값, 알고리즘 또는 모델의 종류에 따라 이해되지 않고 잘 준비된 데이터)가 있을 때 작동하지 않는 잘못된 출력을 생성할 가능성이 있음을 의미합니다. 일일 기준.
이것이 데이터를 탐색하고 이해하며 선택한 모델이 작동하는 방식이 중요한 이유 중 하나입니다. 그렇게 함으로써 우리는 우리 모델에 쓰레기를 넣는 것을 피할 수 있습니다.

데이터 시각화

지금까지 기술 통계를 사용하여 데이터의 일부 품질에 대한 다소 추상적인 스냅샷을 얻었습니다. 또 다른 중요한 단계는 이를 시각화하고 높은 분산, 진폭 및 이상값에 대한 가설을 확인하는 것입니다. 지금까지 관찰한 내용이 데이터에 표시되는지 확인하기 위해 몇 가지 그래프를 그릴 수 있습니다.

예측될 두 클래스와 특징이 어떤 관련이 있는지 보는 것도 흥미롭습니다. 그렇게 하려면 import seaborn 포장하여 사용 pairplot 그래프를 통해 각 기능 분포와 기능별 각 클래스 구분을 확인하세요.

import seaborn as sns


sns.pairplot(data=df, hue='Class')

참고 : pairplot은 모든 기능의 산점도를 결합하고(가능) 기능 분포도 표시하기 때문에 위의 코드를 실행하는 데 시간이 걸릴 수 있습니다.

pairplot을 보면 대부분의 경우 Çerçevelik 클래스는 포인트와 명확하게 구분됩니다. Ürgüp Sivrisi 수업. 한 클래스의 포인트는 다른 클래스가 왼쪽에 있을 때 오른쪽에 있거나 일부는 위쪽에 있고 나머지는 아래쪽에 있습니다. 어떤 종류의 곡선이나 선을 사용하여 클래스를 구분한다면, 이는 클래스를 구분하는 것이 더 쉽다는 것을 보여줍니다. 혼합되어 있으면 분류가 더 어려운 작업이 될 것입니다.

. Eccentricity, CompactnessAspect_Ration 열에서 "격리"되거나 일반적인 데이터 추세에서 벗어나는 일부 포인트(이상값)도 쉽게 발견됩니다.

차트의 왼쪽 상단에서 오른쪽 하단까지의 대각선을 보면 데이터 분포도 클래스에 따라 색상으로 구분되어 있습니다. 분포 모양과 두 곡선 사이의 거리는 두 곡선이 얼마나 분리 가능한지를 나타내는 또 다른 지표입니다. 서로 멀수록 좋습니다. 대부분의 경우 중첩되지 않으므로 분리하기 쉽고 작업에 기여합니다.

순서대로 모든 변수의 상자 그림을 다음을 사용하여 플롯할 수도 있습니다. sns.boxplot() 방법. 대부분의 경우 상자 그림의 방향을 수평으로 맞추는 것이 도움이 되므로 상자 그림의 모양이 분포 모양과 같으므로 다음을 사용하여 수행할 수 있습니다. orient 논의:


sns.boxplot(data=df, orient='h') 

Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

위의 플롯에서 AreaConvex_Area 다른 열의 크기와 비교할 때 크기가 너무 커서 다른 상자 그림을 압도합니다. 모든 상자 그림을 볼 수 있도록 기능의 크기를 조정하고 다시 플롯할 수 있습니다.

그렇게 하기 전에, 예를 들어 다른 값과 밀접하게 관련된 특성 값이 있는 경우 – 다른 특성 값이 커질 때 함께 커지는 값이 있는 경우 긍정적 인 상관 관계; 또는 반대로 수행하는 값이 있는 경우 다른 값이 작아지는 동안 작아집니다. 음의 상관 관계.

데이터에 강력한 관계가 있다는 것은 일부 열이 다른 열에서 파생되었거나 우리 모델과 유사한 의미를 가질 수 있기 때문에 이를 살펴보는 것이 중요합니다. 그런 일이 발생하면 모델 결과가 과대 평가될 수 있으며 우리는 현실에 더 가까운 결과를 원합니다. 강한 상관 관계가 있다는 것은 또한 기능의 수를 줄이고 더 적은 열을 사용하여 모델을 더 많이 만들 수 있음을 의미합니다. 지극히 검소한.

참고 : 로 계산된 기본 상관관계 corr() 방법은 피어슨 상관 계수. 이 계수는 데이터가 정량적이며 정규 분포를 따르고 이상치가 없고 선형 관계를 가질 때 표시됩니다.

또 다른 선택은 다음을 계산하는 것입니다. Spearman의 상관 계수. Spearman 계수는 데이터가 순서형이고 비선형이고 분포가 있고 이상값이 있는 경우에 사용됩니다. 우리 데이터가 Pearson 또는 Spearman의 가정에 완전히 맞지 않는다는 점에 유의하십시오(Kendall의 것과 같은 더 많은 상관 방법도 있음). 데이터는 양적이며 선형 관계를 측정하는 것이 중요하므로 Pearson 계수를 사용합니다.

변수 간의 상관관계를 살펴보고 데이터 전처리로 넘어갈 수 있습니다. 우리는 상관 관계를 계산할 것입니다 corr() Seaborn의 방법으로 시각화하고 heatmap(). 히트맵 표준 크기는 작은 경향이 있으므로 가져옵니다. matplotlib (Seaborn이 구축된 일반 시각화 엔진/라이브러리) 다음으로 크기를 변경합니다. figsize:

import matplotlib.pyplot as plt
plt.figure(figsize=(15, 10))

correlations = df.corr()
sns.heatmap(correlations, annot=True) 

Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

이 히트맵에서 1 또는 -1에 가까운 값은 주의를 기울여야 하는 값입니다. 첫 번째 경우는 높은 양의 상관관계를 나타내고 두 번째 경우는 높은 음의 상관관계를 나타냅니다. 0.8 또는 -0.8보다 크지 않은 경우 두 값 모두 로지스틱 회귀 모델에 도움이 됩니다.

다음과 같이 상관관계가 높을 때 0.99 사이에 Aspec_RationCompactness, 이것은 우리가 만 사용하도록 선택할 수 있음을 의미합니다. Aspec_Ration 또는 Compactness, 둘 다 대신(거의 같기 때문에 예측 자 서로). 에 대해서도 마찬가지입니다. EccentricityCompactness-0.98 상관 관계, AreaPerimeter0.94 상관 관계 및 기타 열.

데이터 전처리

우리는 이미 잠시 동안 데이터를 탐색했으므로 사전 처리를 시작할 수 있습니다. 지금은 클래스 예측을 위한 모든 기능을 사용해 보겠습니다. 첫 번째 모델인 기준선을 얻은 후 상관관계가 높은 열 중 일부를 제거하고 기준선과 비교할 수 있습니다.

기능 열은 X 데이터 및 클래스 열, y 대상 데이터:

y = df['Class']
X = df.drop(columns=['Class'], axis=1)

범주형 기능을 숫자형 기능으로 전환

우리의 Class column – 값이 숫자가 아니므로 변환도 필요합니다. 이 변환을 수행하는 방법에는 여러 가지가 있습니다. 여기에서 우리는 replace() 방법 및 교체 Çerçevelik0Ürgüp Sivrisi1.

y = y.replace('Çerçevelik', 0).replace('Ürgüp Sivrisi', 1)

매핑을 염두에 두십시오! 모델에서 결과를 읽을 때 최소한 마음속으로 다시 변환하거나 다른 사용자의 클래스 이름으로 다시 변환하고 싶을 것입니다.

데이터를 훈련 세트와 테스트 세트로 나누기

탐색 과정에서 기능에 확장이 필요하다는 사실을 확인했습니다. 지금 스케일링을 수행하거나 자동 방식으로 스케일링을 수행하면 전체 값으로 값을 스케일링할 것입니다. Xy. 그 경우에, 우리는 소개할 것입니다 데이터 유출, 곧 테스트 세트의 값이 확장에 영향을 미쳤을 것이기 때문입니다. 데이터 유출은 ML 모델의 재현할 수 없는 결과와 환상적 고성능의 일반적인 원인입니다.

스케일링에 대해 생각하면 먼저 분할해야 함을 보여줍니다. Xy 데이터를 학습 및 테스트 세트에 추가한 다음 맞게 훈련 세트의 스케일러 변환 훈련 세트와 테스트 세트 모두(테스트 세트가 이를 수행하는 스케일러에 영향을 미치지 않음). 이를 위해 우리는 Scikit-Learn의 train_test_split() 방법:

from sklearn.model_selection import train_test_split
SEED = 42 

X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=.25, 
                                                    random_state=SEED)

환경 test_size=.25 데이터의 25%를 테스트에 사용하고 75%를 교육에 사용하고 있습니다. 기본 분할이면 생략할 수 있지만 파이썬 코드를 작성하는 방법은 "명시적인 것이 암시적인 것보다 낫다"고 조언합니다.

참고 : "명시적인 것이 암묵적인 것보다 낫다"는 문장은 다음을 참조합니다. 파이썬의 선, 또는 PEP20. Python 코드 작성에 대한 몇 가지 제안을 제시합니다. 이러한 제안을 따르면 코드가 고려됩니다. 파이썬. 당신은 그것에 대해 더 많이 알 수 있습니다 여기에서 지금 확인해 보세요..

데이터를 훈련 세트와 테스트 세트로 분할한 후에는 각 세트에 몇 개의 레코드가 있는지 확인하는 것이 좋습니다. 그것은 할 수 있습니다 shape 속성:

X_train.shape, X_test.shape, y_train.shape, y_test.shape

다음이 표시됩니다.

((1875, 12), (625, 12), (1875,), (625,))

분할 후 훈련을 위한 1875개의 레코드와 테스트를 위한 625개의 레코드가 있음을 알 수 있습니다.

데이터 확장

훈련 세트와 테스트 세트가 준비되면 Scikit-Learn으로 데이터 확장을 진행할 수 있습니다. StandardScaler 객체(또는 라이브러리에서 제공하는 다른 스케일러). 누출을 방지하기 위해 스케일러가 X_train 그런 다음 데이터와 기차 값을 사용하여 기차와 테스트 데이터를 확장하거나 변환합니다.

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

일반적으로 다음을 호출하기 때문에:

scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

처음 두 줄은 단수로 접을 수 있습니다. fit_transform() 세트의 스케일러에 맞는 호출을 호출하고 한 번에 변환합니다. 이제 데이터를 스케일링한 후 차이를 보기 위해 상자 그림 그래프를 재현할 수 있습니다.

스케일링이 열 이름을 제거하는 것을 고려하면 플로팅하기 전에 시각화를 용이하게 하기 위해 열 이름이 있는 데이터 프레임으로 기차 데이터를 다시 구성할 수 있습니다.

column_names = df.columns[:12] 
X_train = pd.DataFrame(X_train, columns=column_names)

sns.boxplot(data=X_train, orient='h')

Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

마침내 모든 상자 그림을 볼 수 있습니다! 그들 모두에는 이상치가 있고, 다음과 같이 정상에서 더 멀리 분포를 나타내는 기능(곡선이 왼쪽이나 오른쪽으로 치우쳐 있음)이 있습니다. Solidity, Extent, Aspect_RationCompactedness, 와 같은 상관관계가 더 높았다.

IQR 방법으로 이상값 제거

우리는 로지스틱 회귀가 이상값의 영향을 받을 수 있다는 것을 이미 알고 있습니다. 그들을 치료하는 방법 중 하나는 사분위수 범위 or 아이큐알. IQR 방법의 초기 단계는 기차 데이터를 사분위수라고 하는 네 부분으로 나누는 것입니다. 첫 번째 사분위수, Q1, 데이터의 25%, 두 번째, Q2, 50%, 세 번째, Q3, 75%로, 마지막으로, Q4, 100%. 상자 그림의 상자는 IQR 방법으로 정의되며 이를 시각적으로 표현한 것입니다.

가로 상자 그림을 고려할 때 왼쪽의 세로선은 데이터의 25%, 가운데의 세로선은 데이터의 50%(또는 중앙값), 오른쪽의 마지막 세로선은 데이터의 75%를 표시합니다. . 수직선에 의해 정의된 두 사각형의 크기가 더 균일하거나 중앙에 수직선 중앙값이 더 많을수록 데이터가 정규 분포에 더 가깝거나 덜 왜곡되어 분석에 도움이 됩니다.

IQR 상자 외에도 양쪽에 수평선이 있습니다. 이 선은 다음과 같이 정의된 최소 및 최대 분포 값을 표시합니다.

$$
최소값 = Q1 – 1.5*IQR
$$

$$
최대값 = Q3 + 1.5*IQR
$$

IQR은 정확히 Q3과 Q1(또는 Q3 – Q1)의 차이이며 데이터의 가장 중심점입니다. 이것이 IQR을 찾을 때 데이터 극단 또는 최소 및 최대 지점에서 이상치를 필터링하는 이유입니다. 상자 그림은 IQR 방법의 결과가 어떻게 될지 살짝 엿볼 수 있게 해줍니다.

Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

우리는 판다를 사용할 수 있습니다 quantile() 분위수를 찾는 방법 및 iqr 인사말 scipy.stats 패키지를 사용하여 각 열에 대한 사분위수 데이터 범위를 가져옵니다.

from scipy.stats import iqr

Q1 = X_train.quantile(q=.25)
Q3 = X_train.quantile(q=.75)

IQR = X_train.apply(iqr)

이제 Q1, Q3 및 IQR이 있으므로 중앙값에 더 가까운 값을 필터링할 수 있습니다.


minimum = X_train < (Q1-1.5*IQR)
maximum = X_train > (Q3+1.5*IQR)


filter = ~(minimum | maximum).any(axis=1)


X_train = X_train[filter]

훈련 행을 필터링한 후 다음을 사용하여 데이터에 몇 개나 남아 있는지 확인할 수 있습니다. shape:

X_train.shape

결과 :

(1714, 12)

필터링 후 행 수가 1875개에서 1714개로 증가한 것을 볼 수 있습니다. 이는 161개 행에 이상값 또는 데이터의 8.5%가 포함되었음을 의미합니다.

참고 : 이상값 필터링, NaN 값 제거 및 데이터 필터링 및 정리와 관련된 기타 작업은 데이터의 10% 이하 또는 최대 10% 이하로 유지하는 것이 좋습니다. 필터링 또는 제거가 데이터의 XNUMX%를 초과하는 경우 다른 솔루션을 생각해 보십시오.

이상값을 제거한 후 모델에 데이터를 포함할 준비가 거의 되었습니다. 모델 피팅을 위해 우리는 기차 데이터를 사용할 것입니다. X_train 필터링되었지만 어떻습니까 y_train?

y_train.shape

이 결과는 다음과 같습니다.

(1875,)

그것을주의해라 y_train 여전히 1875개의 행이 있습니다. 의 수를 일치시켜야 합니다. y_train 행 수 X_train 행이 아니라 임의적으로. 제거한 호박씨 인스턴스의 y-값을 제거해야 합니다. y_train 세트. 필터링된 X_train stil에는 원래 인덱스가 있고 인덱스에는 이상값을 제거한 간격이 있습니다! 그런 다음 인덱스를 사용할 수 있습니다. X_train DataFrame에서 해당 값을 검색합니다. y_train:

y_train = y_train.iloc[X_train.index]

그 후에 우리는 볼 수 있습니다 y_train 다시 모양:

y_train.shape

출력되는 결과 :

(1714,)

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

지금, y_train 또한 1714개의 행이 있으며 다음과 동일합니다. X_train 행. 마침내 로지스틱 회귀 모델을 만들 준비가 되었습니다!

로지스틱 회귀 모델 구현

어려운 부분이 완료되었습니다! ML 모델의 적용을 단 몇 줄로 간소화한 Scikit-Learn과 같은 라이브러리를 사용할 때 사전 처리는 일반적으로 모델 개발보다 어렵습니다.

먼저 수입 LogisticRegression 클래스를 만들고 인스턴스화하여 LogisticRegression 목적:

from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(random_state=SEED)

둘째, 우리는 기차 데이터를 logreg 모델 fit() 방법을 사용하여 테스트 데이터를 예측합니다. predict() 메서드, 결과 저장 y_pred:



logreg.fit(X_train.values, y_train)
y_pred = logreg.predict(X_test)

우리는 이미 우리의 모델로 예측을 했습니다! 의 처음 3행을 보자. X_train 우리가 사용한 데이터를 보려면:

X_train[:3]

위의 코드는 다음을 출력합니다.

       Area          Perimeter     Major_Axis_Length    Minor_Axis_Length    Convex_Area   Equiv_Diameter       Eccentricity  Solidity      Extent        Roundness     Aspect_Ration        Compactness
0      -1.098308     -0.936518     -0.607941            -1.132551            -1.082768     -1.122359            0.458911      -1.078259     0.562847      -0.176041     0.236617             -0.360134
1      -0.501526     -0.468936     -0.387303            -0.376176            -0.507652     -0.475015            0.125764      0.258195      0.211703      0.094213      -0.122270            0.019480
2      0.012372      -0.209168     -0.354107            0.465095              0.003871      0.054384            -0.453911     0.432515      0.794735      0.647084      -0.617427            0.571137

그리고 처음 3개의 예측에서 y_pred 결과를 보려면:

y_pred[:3] 

결과 :

array([0, 0, 0])

이 세 개의 행에 대해 우리의 예측은 그것이 일류의 씨앗이었으며, Çerçevelik.

로지스틱 회귀, 다음과 같이 최종 클래스를 예측하는 대신 0, 우리는 행이 다음과 관련될 확률을 예측할 수도 있습니다. 0 수업. 이것은 로지스틱 회귀가 데이터를 분류할 때 실제로 일어나는 일이며, predict() 그런 다음 이 예측을 임계값을 통해 전달하여 "하드" 클래스를 반환합니다. 클래스에 속하는 확률을 예측하려면, predict_proba() 사용:

y_pred_proba = logreg.predict_proba(X_test)

y 확률 예측의 처음 3개 값도 살펴보겠습니다.

y_pred_proba[:3] 

출력되는 결과 :

        # class 0   class 1   
array([[0.54726628, 0.45273372],
       [0.56324527, 0.43675473],
       [0.86233349, 0.13766651]])

이제 세 개의 XNUMX 대신 각 클래스에 대해 하나의 열이 있습니다. 왼쪽 열에서 0.54726628, 클래스와 관련된 데이터의 확률 0; 오른쪽 열에서 0.45273372, 클래스와 관련된 확률 1.

참고 : 이러한 분류의 차이는 다음과 같이 알려져 있습니다. 하드부드러운 예측. 하드 예측은 예측을 클래스로 박스화하는 반면 소프트 예측은 예측을 출력합니다. 확률 클래스에 속한 인스턴스의

예상 출력이 어떻게 만들어졌는지에 대한 자세한 정보가 있습니다. 사실은 아니었다 0, 하지만 클래스의 55% 확률 0, 그리고 45%의 확률로 클래스 1. 이것은 처음 세 가지 방법을 표면화합니다. X_test 클래스와 관련된 데이터 포인트 0, 86%의 확률로 세 번째 데이터 포인트에 대해서만 명확하고 처음 두 데이터 포인트에 대해서는 그렇게 많지 않습니다.

ML 방법을 사용하여 결과를 전달할 때 – 일반적으로 소프트 클래스를 반환하는 것이 가장 좋으며 관련 확률은 "신뢰" 그 분류의.

모델에 대해 더 깊이 들어갈 때 계산 방법에 대해 더 이야기할 것입니다. 이 때 다음 단계로 진행할 수 있습니다.

분류 보고서로 모델 평가

세 번째 단계는 모델이 테스트 데이터에서 어떻게 수행되는지 확인하는 것입니다. Scikit-Learn을 가져올 수 있습니다. classification_report() 그리고 우리를 통과 y_testy_pred 인수로. 그 후에 응답을 인쇄할 수 있습니다.

분류 보고서에는 다음과 같이 가장 많이 사용되는 분류 메트릭이 포함되어 있습니다. 정확, 소환, f1-점수 .

  1. Precision: 분류기에 의해 올바른 것으로 간주된 올바른 예측 값을 이해합니다. 정밀도는 이러한 참양성 값을 양수로 예측된 ​​값으로 나눕니다.

$$
정밀도 = frac{text{참 긍정}}{text{참 긍정} + 텍스트{거짓 긍정}}
$$

  1. 소환: 분류기에 의해 얼마나 많은 참 긍정이 식별되었는지 이해합니다. 재현율은 참 양성을 양성으로 예측되어야 하는 것으로 나누어 계산합니다.

$$
회상 = frac{text{참 긍정}}{text{참 긍정} + 텍스트{거짓 부정}}
$$

  1. F1 점수: 균형 또는 고조파 평균 정확도와 재현율. 가장 낮은 값은 0이고 가장 높은 값은 1입니다. f1-score 1과 같으면 모든 클래스가 올바르게 예측되었음을 의미합니다. 이는 실제 데이터로 얻기가 매우 어려운 점수입니다.

$$
텍스트{f1-점수} = 2* frac{텍스트{정밀도} * 텍스트{리콜}}{텍스트{정밀도} + 텍스트{리콜}}
$$

  1. 정확성: 분류기가 얼마나 많은 예측이 맞았는지 설명합니다. 가장 낮은 정확도 값은 0이고 가장 높은 값은 1입니다. 이 값에 일반적으로 100을 곱하여 백분율을 얻습니다.

$$
정확도 = frac{text{정확한 예측 수}}{text{총 예측 수}}
$$

참고 : 실제 데이터에서 100% 정확도를 얻는 것은 극히 어렵습니다. 그런 일이 발생하면 일부 누출이나 잘못된 일이 발생할 수 있음을 인식하십시오. 이상적인 정확도 값에 대한 합의가 없으며 컨텍스트에 따라 다릅니다. 70% 값은 분류자가 데이터의 30%에서 실수를 하거나 70% 이상이면 대부분의 모델에 충분함을 의미합니다.

from sklearn.metrics import classification_report
cr = classification_report(y_test, y_pred)
print(cr)

그런 다음 분류 보고서 출력을 볼 수 있습니다.

				precision    recall  f1-score   support

           0       0.83      0.91      0.87       316
           1       0.90      0.81      0.85       309

    accuracy                           0.86       625
   macro avg       0.86      0.86      0.86       625
weighted avg       0.86      0.86      0.86       625

이것이 우리의 결과입니다. 그것을주의해라 precision, recall, f1-scoreaccuracy 메트릭은 모두 80% 이상으로 매우 높아 이상적이지만 이러한 결과는 아마도 높은 상관 관계의 영향을 받았을 것이며 장기적으로 유지되지 않을 것입니다.

모델의 정확도는 86%이며, 이는 14%의 경우 분류가 잘못되었음을 의미합니다. 우리는 그 전반적인 정보를 가지고 있지만 클래스 분류와 관련하여 14%의 실수가 발생하는지 아는 것은 흥미로울 것입니다. 0 또는 수업 1. 어떤 클래스가 어떤 클래스로, 어떤 빈도로 잘못 식별되었는지 식별하기 위해 계산하고 플로팅할 수 있습니다. 혼란 매트릭스 우리 모델의 예측.

혼동 행렬로 모델 평가하기

정오분류표를 계산한 다음 플로팅해 보겠습니다. 그렇게 하고 나면 각 부분을 이해할 수 있습니다. 정오분류표를 그리기 위해 Scikit-Learn을 사용합니다. confusion_matrix()에서 가져올 것입니다. metrics 기준 치수.

혼동 행렬은 Seaborn을 사용하여 시각화하기가 더 쉽습니다. heatmap(). 그래서 그것을 생성한 후에 우리는 우리의 혼동 행렬을 히트맵에 대한 인수로 전달할 것입니다:

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d')

Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

  1. 혼란 매트릭스: 행렬은 각 클래스에 대해 모델이 옳고 그른 샘플의 수를 보여줍니다. 정확하고 정확하게 예측된 값을 호출합니다. 진정한 긍정, 그리고 긍정적으로 예측되었지만 긍정적이지 않은 것을 호출합니다. 가양 성. 의 동일한 명칭 진정한 부정거짓 부정 음수 값에 사용됩니다.

혼동 행렬 플롯을 보면 다음을 알 수 있습니다. 287 가치 0 그리고 다음과 같이 예측했다 0 - 또는 진정한 긍정 학급을 위해 0 (Çerçevelik 씨앗). 우리도 가지고있다 250 클래스에 대한 진정한 긍정 1 (위르귀프 시브리시 씨앗). 참양성은 항상 왼쪽 위에서 오른쪽 아래로 가는 행렬 대각선에 위치합니다.

우리는 또한이 29 있어야 할 가치 0, 그러나 다음과 같이 예측 1 (가양 성) and 59 가치 1 그리고 다음과 같이 예측했다 0 (거짓 부정). 이 숫자를 사용하면 모델이 가장 많이 만드는 오류가 거짓 음성을 예측한다는 것을 이해할 수 있습니다. 따라서 대부분 Ürgüp Sivrisi 종자를 Çerçevelik 종자로 분류하게 될 수 있습니다.

이러한 종류의 오류는 클래스의 81% 회상으로도 설명됩니다. 1. 메트릭이 연결되어 있습니다. 그리고 리콜의 차이는 Ürgüp Sivrisi 클래스의 샘플이 100개 적기 때문에 발생합니다. 이것은 다른 클래스보다 적은 수의 샘플을 갖는 것의 의미 중 하나입니다. 재현율을 더 높이려면 등급 가중치로 실험하거나 더 많은 Ürgüp Sivrisi 샘플을 사용할 수 있습니다.

지금까지 우리는 대부분의 데이터 과학 전통적인 단계를 실행했고 로지스틱 회귀 모델을 블랙박스로 사용했습니다.

참고 : 더 진행하려면 다음을 사용하십시오. 교차 검증(CV) 및 그리드 검색 데이터와 관련하여 가장 일반화하는 모델과 훈련 전에 선택된 최상의 모델 매개변수를 각각 찾거나, 하이퍼 파라미터.

이상적으로는 CV 및 Grid Search를 사용하여 데이터 사전 처리 단계, 데이터 분할, 모델링 및 평가를 수행하는 연결된 방법을 구현할 수도 있습니다. 파이프 라인.

이제 블랙박스를 열고 내부를 살펴보고 로지스틱 회귀가 어떻게 작동하는지 더 깊이 이해할 차례입니다.

로지스틱 회귀가 실제로 어떻게 작동하는지 자세히 알아보기

XNUMXD덴탈의 되돌아옴 단어가 우연히 거기에 있는 것이 아닙니다. 로지스틱 회귀가 무엇을 하는지 이해하기 위해 형제인 선형 회귀가 데이터에 대해 수행하는 작업을 기억할 수 있습니다. 선형 회귀 공식은 다음과 같습니다.

$$
y = b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n
$$

어느 b0 회귀 절편, b1 계수와 x1 자료.

그 방정식은 새로운 값을 예측하는 데 사용되는 직선이 되었습니다. 서론을 상기해보면, 차이점은 우리가 새로운 값을 예측하지 않고 클래스를 예측한다는 것입니다. 그래서 그 직선이 바뀌어야 합니다. 로지스틱 회귀를 사용하여 비선형성을 도입하고 이제 선 대신 곡선을 사용하여 예측이 이루어집니다.

Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

선형 회귀선이 계속 진행되고 연속적인 무한 값으로 구성되는 동안 로지스틱 회귀 곡선은 중간에서 나눌 수 있으며 0과 1 값에서 극단을 가질 수 있습니다. 그 "S" 모양은 데이터를 분류하는 이유입니다. 가장 높은 말단에 더 가깝거나 떨어지는 점은 클래스 1에 속하고 하위 사분면에 있거나 0에 더 가까운 점은 클래스 0에 속합니다. "S"는 0과 1 사이의 중간, 0.5 - 로지스틱 회귀 지점의 임계값입니다.

Python PlatoBlockchain 데이터 인텔리전스의 로지스틱 회귀에 대한 최종 가이드. 수직 검색. 일체 포함.

우리는 이미 로지스틱 회귀와 선형 회귀의 시각적 차이를 이해하고 있지만 공식은 어떻습니까? 로지스틱 회귀 공식은 다음과 같습니다.

$$
y = b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n
$$

다음과 같이 작성할 수도 있습니다.

$$
y_{prob} = frac{1}{1 + e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}}
$$

또는 다음과 같이 작성할 수도 있습니다.

$$
y_{prob} = frac{e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}}{1 + e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}}
$$

위의 방정식에서 값 대신 입력 확률이 있습니다. 그것은 분자로 1을 가지므로 0과 1 사이의 값이 될 수 있고 1에 분모 값을 더한 값이 1 이상이어야 합니다. 이는 전체 분수 결과가 1보다 클 수 없음을 의미합니다. .

그리고 분모에 있는 값은 무엇입니까? 그것은이다 e, 자연 로그의 밑(약 2.718282), 선형 회귀의 거듭제곱:

$$
e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}
$$

작성하는 또 다른 방법은 다음과 같습니다.

$$
ln 왼쪽( frac{p}{1-p} 오른쪽) = {(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}
$$

그 마지막 방정식에서, ln 는 자연 로그(밑 e)이고 p 는 확률이므로 결과 확률의 로그는 선형 회귀 결과와 동일합니다.

즉, 선형 회귀 결과와 자연 로그를 사용하여 설계된 클래스에 속하는 입력의 확률에 도달할 수 있습니다.

전체 로지스틱 회귀 유도 프로세스는 다음과 같습니다.

$$
p{X} = frac{e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}}{1 + e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}}
$$

$$
p(1 + e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}) = e^{(b_0 + b_1 * x_1 + b_2 *x_2 + b_3 * x_3 + ldots + b_n * x_n)}
$$

$$
p + p*e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)} = e^{(b_0 + b_1 * x_1 + b_2 *x_2 + b_3 * x_3 + ldots + b_n * x_n)}
$$

p
=

e

(

b
0

+

b
1

*

x
1

+

b
2

*

x
2

+

b
3

*

x
3

+
...
+

b
n

*

x
n

)

-
p
*

e

(

b
0

+

b
1

*

x
1

+

b
2

*

x
2

+

b
3

*

x
3

+
...
+

b
n

*

x
n

)

$$
frac{p}{1-p} = e^{(b_0 + b_1 * x_1 + b_2 *x_2 + b_3 * x_3 + ldots + b_n * x_n)}
$$

$$
ln 왼쪽( frac{p}{1-p} 오른쪽) = (b_0 + b_1 * x_1 + b_2 *x_2 + b_3 * x_3 + ldots + b_n * x_n)
$$

이는 로지스틱 회귀 모델에도 계수와 절편 값이 있음을 의미합니다. 선형 회귀를 사용하고 자연 로그(e).

다음을 사용하여 선형 회귀에서와 동일한 방식으로 모델의 계수 및 절편 값을 볼 수 있습니다. coef_intercept_ 속성 :

logreg.coef_

다음은 12가지 기능 각각의 계수를 표시합니다.

array([[ 1.43726172, -1.03136968,  0.24099522, -0.61180768,  1.36538261,
        -1.45321951, -1.22826034,  0.98766966,  0.0438686 , -0.78687889,
         1.9601197 , -1.77226097]])
logreg.intercept_

그 결과:

array([0.08735782])

계수와 절편 값을 사용하여 데이터의 예측 확률을 계산할 수 있습니다. 먼저 받자 X_test 값을 다시 한 번 예로 들면 다음과 같습니다.

X_test[:1]

이것은 첫 번째 행을 반환합니다. X_test NumPy 배열로:

array([[-1.09830823, -0.93651823, -0.60794138, -1.13255059, -1.0827684 ,
        -1.12235877,  0.45891056, -1.07825898,  0.56284738, -0.17604099,
         0.23661678, -0.36013424]])

초기 방정식에 따라:

$$
p{X} = frac{e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}}{1 + e^{(b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + ldots + b_n * x_n)}}
$$

파이썬에는 다음이 있습니다.

import math

lin_reg = logreg.intercept_[0] + 
((logreg.coef_[0][0]* X_test[:1][0][0])+ 
(logreg.coef_[0][1]* X_test[:1][0][1])+ 
(logreg.coef_[0][2]* X_test[:1][0][2])+ 
(logreg.coef_[0][3]* X_test[:1][0][3])+ 
(logreg.coef_[0][4]* X_test[:1][0][4])+ 
(logreg.coef_[0][5]* X_test[:1][0][5])+ 
(logreg.coef_[0][6]* X_test[:1][0][6])+ 
(logreg.coef_[0][7]* X_test[:1][0][7])+ 
(logreg.coef_[0][8]* X_test[:1][0][8])+ 
(logreg.coef_[0][9]* X_test[:1][0][9])+ 
(logreg.coef_[0][10]* X_test[:1][0][10])+ 
(logreg.coef_[0][11]* X_test[:1][0][11]))

px = math.exp(lin_reg)/(1 +(math.exp(lin_reg)))
px

결과 :

0.45273372469369133

다시한번 살펴보자면 predict_proba 첫 번째 결과 X_test 라인, 우리는:

logreg.predict_proba(X_test[:1])


이것은 원래 로지스틱 회귀 방정식이 클래스에 대한 입력의 확률을 제공한다는 것을 의미합니다. 1, 클래스에 대한 확률을 알아내기 위해 0, 우리는 간단하게:

1 - px


둘 다 px1-px ~와 동일하다 predict_proba 결과. 이것이 로지스틱 회귀가 계산되는 방법과 그 이유 되돌아옴 이름의 일부입니다. 그러나 용어는 어떻습니까 기호 논리학의?

용어 기호 논리학의 에서 오는 로짓, 이것은 우리가 이미 본 기능입니다:

$$
ln 왼쪽( frac{p}{1-p} 오른쪽)
$$

우리는 방금 그것을 계산했습니다. px1-px. 이것은 로짓이라고도 하는 로짓입니다. 로그 확률 확률의 로그와 같기 때문에 p 확률이다.

결론

이 가이드에서는 가장 기본적인 기계 학습 분류 알고리즘 중 하나를 공부했습니다. 로지스틱 회귀.

처음에는 Scikit-Learn의 기계 학습 라이브러리를 사용하여 로지스틱 회귀를 블랙박스로 구현했으며 나중에 회귀 및 로지스틱이라는 용어가 왜 그리고 어디서 유래했는지 명확하게 알기 위해 단계별로 이해했습니다.

우리는 또한 데이터 과학 분석의 가장 중요한 부분 중 하나라는 것을 이해하면서 데이터를 탐구하고 연구했습니다.

여기에서 나는 당신이 가지고 놀기를 조언합니다. 다중 클래스 로지스틱 회귀, 두 개 이상의 클래스에 대한 로지스틱 회귀 - 여러 클래스가 있는 다른 데이터 세트에 대해 동일한 로지스틱 회귀 알고리즘을 적용하고 결과를 해석할 수 있습니다.

참고 : 좋은 데이터 세트 모음을 사용할 수 있습니다. 여기에서 지금 확인해 보세요. 당신이 가지고 놀기 위해.

또한 L1과 L2를 공부하는 것이 좋습니다. 정규화, 그들은 모델의 복잡성을 유지하여 알고리즘이 더 나은 결과를 얻을 수 있도록 정상에 더 가까워지기 위해 더 높은 데이터를 "페널티 부여"하는 방법입니다. 우리가 사용한 Scikit-Learn 구현에는 이미 기본적으로 L2 정규화가 있습니다. 또 다른 볼거리는 해결사같은 lbgs, 로지스틱 회귀 알고리즘 성능을 최적화합니다.

을 살펴보는 것도 중요합니다. 통계적인 로지스틱 회귀에 대한 접근. 그것은 가지고있다 가정 데이터 동작 및 다음과 같이 만족스러운 결과를 보장하기 위해 보유해야 하는 기타 통계:

  • 관찰은 독립적입니다.
  • 설명변수들 사이에는 다중공선성이 없다.
  • 극단적인 이상값은 없습니다.
  • 설명 변수와 응답 변수의 로짓 사이에는 선형 관계가 있습니다.
  • 표본 크기가 충분히 큽니다.

이러한 가정 중 얼마나 많은 가정이 데이터 분석 및 처리에서 이미 다루어졌는지 주목하십시오.

로지스틱 회귀가 모든 다양한 접근 방식에서 제공해야 하는 것을 계속 탐색하기를 바랍니다!

타임 스탬프 :

더보기 스택카부스