Flask로 기계 학습 모델 배포

| | | | | | | | | | |

새로운 데이터를 예측하는 데 사용하려면 외부 세계에서 사용할 수 있도록 인터넷을 통해 배포해야 합니다. 이 기사에서는 기계 학습 모델을 훈련하고 Flask를 사용하여 웹 애플리케이션을 구축한 방법에 대해 이야기할 것입니다.

이 모델에서 사용할 많은 필수 라이브러리를 설치해야 합니다. pip를 사용하여 모든 라이브러리를 설치합니다.

pip install pandas pip install numpy pip install sklearn 

의사결정 트리 —
의사결정 트리 — 사용하기 쉽고 탄력적이며 유연하기 때문에 잘 알려진 지도 머신 러닝 알고리즘입니다. UCI 머신 러닝 저장소의 성인 데이터 세트에 알고리즘을 구현했습니다.

데이터 검색 —
이 링크 에서 데이터세트를 검색할 수 있습니다.

데이터세트 가져오기가 끝이 아닙니다. 데이터를 사전 처리해야 하므로 데이터 세트를 지워야 합니다. 데이터 세트 정리에는 누락된 값 제거, NA 값 채우기 등과 같은 다양한 유형의 프로세스가 포함됩니다.


# 데이터 세트 가져오기 < / p>

가져오기 pandas

가져오기 numpy

sklearn 가져오기 전처리


df = pandas.read_csv ( `adult.csv` )

df.head ()

출력:

데이터 세트 사전 처리 —
14개의 속성과 개인의 연간 소득이 5만 이상인지 여부를 나타내는 클래스 레이블로 구성됩니다. 이러한 속성은 사람의 나이, 노동 계급 레이블, 관계 상태 및 해당 사람이 속한 인종에 이르기까지 다양합니다. 모든 속성에 대한 정보는 여기에서 찾을 수 있습니다.

먼저 데이터에서 모든 누락된 값을 찾아 제거합니다. 누락된 값을 이 열의 모드 값으로 대체했습니다. 누락된 값을 대체하는 다른 방법이 많이 있지만 이 데이터 세트 유형에 가장 적합한 것으로 보입니다.


<코드 클래스 ="일반 "> df <코드 클래스 ="키워드 "> = <코드 클래스 = "일반 "> df.drop ([ `fnlwgt` , `교육- 숫자` <코드 클래스 ="일반 ">], 축 <코드 클래스 ="키워드 "> = <코드 클래스 ="값 "> 1 <코드 클래스 ="일반 ">)

col_names = df.columns


c col_names:

df <코드 클래스 = " 키워드 "> = <코드 클래스 s ="일반 "> df.replace( <코드 클래스 ="문자열 ">"? " , numpy.NaN)

df = df. 적용 ( 람다 <코드 클래스 = "일반"> x: x.fillna (x.value_counts (). 인덱스 [ <코드 클래스 = "값"> 0 <코드 클래스 = "plain">]))

기계 학습 알고리즘은 범주형 데이터 값을 처리할 수 없으며 숫자 값만 처리할 수 있습니다.
데이터를 예측 모델에 맞추려면 범주형 값을 숫자 값으로 변환해야 합니다. 이 작업을 수행하기 전에 범주형 열에 변환이 필요한지 여부를 평가합니다.

불연속성 — 은 범주형 데이터를 보다 정확하고 의미 있게 만드는 일반적인 방법입니다. 결혼 또는 미혼 값으로 범위를 좁히는 marital_status 열에 이산화를 적용했습니다. 나중에 나머지 데이터 열에 레이블 인코더를 적용합니다. 또한 두 개의 중복 열이 있습니다. {' 교육 `, ` Education-num '} , 그래서 우리는 그 중 하나를 제거했습니다.


df.replace ([ `이혼` , `결혼- AF 배우자` ,

` 기혼 배우자` , ` 기혼 배우자 부재` ,

`미혼` , `분리` , `과부` ],

[ `이혼` , <코드 클래스 = "문자열"> `결혼` <코드 클래스 ="일반 ">, <코드 클래스 ="문자열" >` 결혼` , `결혼` ,

`미혼` , ` 미혼` , `결혼하지 않음` ], inplace = <코드 클래스 = "color1"> 참 <코드 클래스 = "일반">)


<코드 클래스 = "일반 "> category_col <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "문자열"> `작업 클래스` <코드 클래스 ="일반 ">, <코드 클래스 ="문자열 ">` 인종` <코드 클래스 = "일반">, <코드 클래스 = "문자열"> `교육` <코드 클래스 ="일반 ">, <코드 클래스 ="문자열 " > `결혼 상태` <코드 클래스 ="일반 ">, <코드 클래스 = "문자열"> `직업` <코드 클래스 ="일반 ">,

<코드 클래스 s ="정의되지 않은 공백 "> `관계` , ` 성별` <코드 클래스 = "일반" >, <코드 클래스 = "문자열"> `네이티브 국가` <코드 클래스 ="일반 ">, <코드 클래스 ="string ">` 소득` ]

labelEncoder = <코드 클래스 = "일반"> 전처리.LabelEncoder()


<코드 클래스 = "일반"> mapping_dict <코드 class = "keyword"> = {}

for in category_col:

df [col] <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> 레이블 인코더. fit_transform (df [col])


le_name_mapping = <코드 클래스 = "functions"> dict ( zip (labelEncoder.classes_,

labelEncoder.transform (labelEncoder.classes_)))


mapping_dict [col] = le_name_mapping

인쇄 <코드 클래스 = "일반"> (mapping_dict)

출력:

{`workclass`: {`?`: 0, `Federal-gov`: 1, `Local-gov`: 2, `무직`: 3, `개인`: 4, `자영업`: 5, `자영업`: 6, `국가 정부`: 7,` 무급 `: 8},` 인종 `: {` 아메르-인도-에스키모 `: 0,` 아시아-팩-섬인 `: 1,` 흑인 `: 2,` 기타 `: 3,` 백인 `: 4},` 교육 `: {` 10번째 `: 0,` 11번째 `: 1,` 12번째 `: 2,` 1번째-4번째 `: 3,` 5번째-6번째 `: 4,` 7번째-8번째 `: 5,` 9번째 `: 6,` Assoc- acdm `: 7,` Assoc-voc `: 8,` 학사`: 9, `박사`: 10, `고교-대학원`: 11, `석사`: 12, `유치원`: 13,` 교수-학교` : 14, `대학생`: 15}, `결혼 여부`: {`이혼 `: 0,` 기혼-AF-배우자 `: 1,` 기혼-시민-배우자 `: 2,` 기혼-배우자- 결석 `: 3,` 미혼 `: 4,` 별거 `: 5,` 사별 `: 6},` 직업 `: {`? `: 0,` `제독-사무`: 1,` 군대`: 2, `공예-수리`: 3, `간부-관리`: 4, `농업-낚시`: 5, `핸들러-청소부`: 6, `Machine-op-inspct`: 7, `기타 서비스`: 8, `Priv-house-serv`: 9, `Profes-specialty`: 10, `Protective-serv`: 11, `Sales`: 12, `기술지원`: 13, `운송이사`: 14} , `관계`: {`남편`: 0, `비가족`: 1, `기타 친척`: 2, `자주` -자녀`: 3, `미혼`: 4, `아내`: 5}, `성별`: { `여자`: 0, `남성`: 1}, `본국`: {`?`: 0, `캄보디아`: 1, `캐나다`: 2, `중국`: 3, `콜럼비아`: 4, `쿠바`: 5, `도미니카공화국`: 6, `에콰도르`: 7, `엘살바도르`: 8, `영국`: 9, `프랑스`: 10, `독일`: 11, `그리스`: 12, `과테말라`: 13, `아이티`: 14, `네덜란드-네덜란드`: 15, `온두라스`: 16, `홍`: 17, `헝가리`: 18, `인도`: 19, `이란`: 20, `아일랜드`: 21, `이탈리아`: 22, `자메이카`: 23, `일본`: 24, `라오스`: 25,` 멕시코 `: 26,` 니카라과 `: 27,` 외곽-미국(괌-USVI-etc) `: 28,` 페루 `: 29,` 필리핀`: 30, `폴란드`: 31 , `포르투갈`: 32, `푸에르토리코` : 33, `스코틀랜드`: 34, `남부`: 35, `대만`: 36, `태국`: 37, `트리나다드 & amp; 토바고`: 38, `미국`: 39, `베트남`: 40, `유고스 라비아`: 41}, `소득`: { `50K`: 1}}


모델 맞추기 —
전처리 후 데이터를 기계 학습 알고리즘으로 전송할 준비가 되었습니다. 그런 다음 속성이 있는 레이블을 제거하여 데이터를 분할합니다. 이제 데이터 세트를 훈련용과 테스트용의 두 부분으로 분할했습니다. 이것은 train_test_split () sklearn 함수로 달성됩니다.


from sklearn. model_selection 가져오기 train_test_split

에서 <코드 클래스 = "일반"> sklearn.tree <코드 클래스 = "키워드"> 가져오기 <코드 클래스 = "일반"> DecisionTreeClassifier

from sklearn.metrics 가져오기 정확도_점수 < /코드>


<코드 클래스 = "일반"> X <코드 클래스 = "키워드" > = <코드 클래스 = "일반"> df.values ‚Äã‚Äã[:, <코드 클래스 = "값"> 0 <코드 클래스 = "일반">: <코드 클래스 = "값"> 12 <코드 클래스 = "일반">]

<코드 클래스 = "일반"> Y <코드 클래스 = "키워드 "> = <코드 클래스 ="일반 "> df.values ‚Äã‚Äã[:, <코드 클래스 ="값 "> 12 <코드 클래스 ="일반 ">]

< /td>

여기서 12월을 사용했습니다. ision tree classifier를 예측 모델로 사용합니다. 학습 부분에 모델 학습을 위한 데이터를 제공했습니다.
학습이 완료되면 일부 데이터를 제공하여 모델을 테스트하여 모델의 정확도를 검증합니다.
덕분에 정확도를 달성합니다. 약 84%입니다. 이제 이 모델을 새로운 미지의 데이터와 함께 사용하려면 나중에 값을 예측할 수 있도록 모델을 저장해야 합니다. 이를 위해 Python 객체의 구조를 직렬화 및 역직렬화하기 위한 강력한 알고리즘인 Python에서 Pickle 을 사용합니다.


< / p>

X_train, X_test, y_train, y_test = train_test_split (

<코드 클래스 = "일반"> X, Y, 테스트_크기 <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 0.3 <코드 클래스 = "일반">, random_state <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 100 <코드 클래스 = "일반"> )


dt_clf_gini = DecisionTreeClassifier (기준 = "gini" ,

random_state = 100 <코드 클래스 = "일반">,

<코드 클래스 = "일반"> 최대 깊이 <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 5 <코드 클래스 = "일반">,

<코드 클래스 = "일반" > min_samples_leaf <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 5 <코드 클래스 = "일반">)


< 코드 클래스 = "일반"> dt_clf_gini.fit (X_train, y_train)

y_pred_gini <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> dt_clf_gini.predict (X_test)


인쇄 <코드 클래스 = "일반" > ( "Gini 인덱스 정확도를 사용하는 Desicion Tree is" ,

정확도 점수 (y_test, y_pred_gini) <코드 클래스 = "키워드"> * <코드 클래스 = "값"> 100 <코드 클래스 = "일반">)

출력:

<사전> 지니 인덱스 정확도를 이용한 데시션 트리는 83.13031016480704

이제 주입 —
플라스크 — 소규모 웹 사이트 개발에 사용되는 Python 기반 마이크로 프레임워크입니다. Flask는 Python을 사용하여 Restful API를 구축하는 것이 매우 쉽습니다. 이 시점에서 다양한 데이터 속성을 기반으로 데이터 클래스를 예측할 수 있는 model.pkl 모델을 개발했습니다. 클래스 레이블 — 급여" = 50K 또는 "50K .
이제 사용자가 모든 속성 값을 입력하고 모델에 제공된 교육을 기반으로 데이터가 모델에 수신되는 웹 애플리케이션을 디자인합니다. 데이터가 제공된 사람의 급여가 얼마인지 예측합니다.

HTML 양식 —
다양한 속성에서 소득을 예측하려면 먼저 데이터(새 속성 값)를 수집한 다음 위에서 구축한 의사결정 트리 모델을 사용하여 소득이 50,000보다 크거나 작을지 예측해야 합니다. 따라서 데이터를 수집하기 위해 각 속성에서 선택할 수 있는 다양한 옵션이 모두 포함된 HTML 양식을 만듭니다. 여기서는 HTML만 사용하여 간단한 양식을 만들었습니다. 양식을 보다 대화식으로 만들고 싶다면 그렇게 할 수 있습니다.


" <코드 클래스 = "키워드"> html <코드 클래스 = "일반">"

<코드 클래스 = "일반"> " 본문 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> h3 <코드 클래스 = "일반">" 소득 예측 양식 "/ <코드 클래스 = "키워드"> h3 <코드 클래스 = "일반">"


" <코드 클래스 = "키워드 "> div <코드 클래스 ="일반 ">"

<코드 클래스 = "일반"> " 양식 작업 = "/ 결과" <코드 클래스 = "color1" > 메서드 <코드 클래스 = "일반"> = <코드 클래스 = "문자열"> "POST" <코드 클래스 = "일반">"

<코드 클래스 = "일반"> " 레이블 for = "나이" <코드 클래스 = "일반">" 나이 "/ 라벨 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 입력 <코드 클래스 = "color1"> 유형 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "텍스트" <코드 클래스 = "color1"> ID <코드 클래스 = "일반"> = <코드 클래스 = "문자열"> "나이" < 코드 클래스 = "color1"> 이름 <코드 클래스 = "일반"> = <코드 클래스 = "문자열"> "나이" <코드 클래스 = "일반"> & gt ;

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> br <코드 클래스 = "일반">"

<코드 클래스 = "일반"> " 레이블 for = "w_class" <코드 클래스 = "일반">" 노동 계급 "/ 라벨 "

<코드 클래스 = "일반"> " 선택 id = "w_class" 이름 = "w_class" < 코드 클래스 = "일반">"

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "0" <코드 클래스 = "일반">" 연방 정부 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "1" <코드 클래스 = "일반">" 지방 정부 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "2" <코드 클래스 = "일반">" 일한 적 없음 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "3" <코드 클래스 = "일반">" 개인 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "4" <코드 클래스 = "일반">" 자영업 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "5" <코드 클래스 = "일반">" 자영업 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "6" <코드 클래스 = "일반">" 주정부 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "7" <코드 클래스 = "일반">" 무급 "/ 옵션 "

<코드 클래스 = "일반"> "/ 선택 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> br <코드 클래스 = "일반">"

<코드 클래스 = "일반"> " 레이블 for = "에듀" <코드 클래스 = "일반">" 교육 "/ 라벨 "

<코드 클래스 = "일반"> " 선택 id = "에듀" <코드 클래스 = "color1"> 이름 <코드 클래스 = "일반"> = <코드 클래스 = "문자열"> "에듀" < 코드 클래스 = "일반">"

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "0" <코드 클래스 = "일반">" 10 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "1" <코드 클래스 = "일반">" 11일 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "2" <코드 클래스 = "일반">" 12일 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "3" <코드 클래스 = "일반">" 1-4 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "4" <코드 클래스 = "일반">" 5-6 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "5" <코드 클래스 = "일반">" 7-8 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "6" <코드 클래스 = "일반">" 9일 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "7" <코드 클래스 = "일반">" Assoc-acdm "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "8" <코드 클래스 = "일반">" Assoc-voc "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "9" <코드 클래스 = "일반">" 학사 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "10" <코드 클래스 = "일반">" 박사 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "11" <코드 클래스 = "일반">" HS-대학원 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "12" <코드 클래스 = "일반">" 석사 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "13" <코드 클래스 = "일반">" 유치원 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "14" <코드 클래스 = "일반">" 전문학교 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "15" <코드 클래스 = "일반">" 16 - 일부 대학 "/ 옵션 "

<코드 클래스 = "일반"> "/ 선택 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> br <코드 클래스 = "일반">"

<코드 클래스 = "일반"> " 레이블 for = "martial_stat" <코드 클래스 = "일반">" 결혼 상태 "/ 라벨 "

<코드 클래스 = "일반"> " 선택 id = "martial_stat" 이름 = "martial_stat" < 코드 클래스 = "일반">"

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "0" <코드 클래스 = "일반">" 이혼 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "1" <코드 클래스 = "일반">" 결혼한 "/ 옵션 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> 옵션 <코드 클래스 = "color1"> 값 <코드 클래스 = "일반"> = <코드 클래스 = "문자열" > "2" <코드 클래스 = "일반">" 미혼 "/ 옵션 "

<코드 클래스 = "일반"> "/ 선택 "

<코드 클래스 = "일반"> " <코드 클래스 = "키워드"> br <코드 클래스 = "일반">"

code class = "plain">" 이혼 "/ 옵션 "

<코드 클래스 = "일반"> " 옵션 = "1"

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method