Flask kullanarak bir makine öğrenimi modeli dağıtma

| | | | | | | | | | |

Yeni verileri tahmin etmek için bunları kullanmak için, dış dünyanın kullanabilmesi için İnternet üzerinden dağıtmamız gerekiyor. Bu yazımızda bir makine öğrenme modelini nasıl eğittiğimizden, Flask kullanarak bunun üzerine bir web uygulaması oluşturduğumuzdan bahsedeceğiz.

Bu modelde kullanılacak bir çok gerekli kütüphaneyi kurmamız gerekiyor. Tüm kitaplıkları kurmak için pip kullanın.

pip install pandas pip install numpy pip install sklearn 

Karar ağacı —
Karar ağacı — kullanımı kolay, elastik ve esnek olduğu için iyi bilinen bir denetimli makine öğrenme algoritmasıdır. Algoritmayı UCI makine öğrenimi deposundan bir yetişkin veri kümesine uyguladım.

Verileri al —
Veri kümesini bu bağlantıdan alabilirsiniz.

Veri kümesini almak son değil. Verileri önceden işlememiz gerekiyor, bu da veri kümesini temizlememiz gerektiği anlamına geliyor. Veri kümesi temizliği, eksik değerlerin kaldırılması, NA değerlerinin doldurulması vb. gibi çeşitli işlem türlerini içerir.


# import dataset < / p>

import pandalar

import numpy

`dan sklearn içe aktar önişleme


df = pandas.read_csv ( `yetişkin.csv` >

df.head ()

Çıktı:

Veri kümesi ön işleme —
14 nitelik ve kişinin yıllık gelirinin 50 binden az mı yoksa fazla mı olduğunu gösteren sınıf etiketinden oluşur. Bu nitelikler, bir kişinin yaşından, işçi sınıfı etiketinden, ilişki durumuna ve kişinin ait olduğu ırka kadar değişir. Tüm özniteliklerle ilgili bilgileri burada bulabilirsiniz.

Öncelikle, tüm eksik değerleri ‚Äã‚Äã bulup verilerden kaldırıyoruz. Bu sütunda eksik olan ‚Äã‚Äã değerlerini mod değeri ile değiştirdik. Eksik değerleri değiştirmenin başka birçok yolu vardır, ancak bu veri kümesi türü için en iyisi bu gibi görünüyordu.


df = df.drop ([ `fnlwgt` , `eğitim- num` ], axis = 1 )

sütun_adları = df.columns


> c sütun_adlarında:

df = df.replace ( "? " , numpy. NaN)

df = df. uygula ( lambda x: x.fillna (x.value_counts(). index [ 0 ]))

Makine öğrenimi algoritması kategorik veri değerlerini işleyemez. Yalnızca sayısal değerleri işleyebilir.
Verileri tahmin modeline sığdırmak için kategorik değerleri ‚Äã‚Äã sayısal değerlere dönüştürmemiz gerekiyor. Bunu yapmadan önce kategorik sütunlarda herhangi bir dönüşüme gerek olup olmadığını değerlendireceğiz.

Ayrıklık — , kategorik verileri daha doğru ve anlamlı hale getirmenin yaygın bir yoludur. marital_status sütununa, yalnızca evli veya evli olmayan değerlere daraltıldıkları ayrıklaştırma uyguladık. Daha sonra etiket kodlayıcıyı kalan veri sütunlarına uygulayacağız. Ayrıca, iki yedek sütun vardır {&39; eğitim ', ' eğitim-num '} , bu yüzden birini kaldırdık.


df.replace ([ `Boşanmış` , `Evli- AF-eş` ,

` Evli-eş-eş` , ` Evli-eş-yok` ,

`Hiç evlenmemiş` , `Ayrılmış` , `Dul` ],

[ `boşanmış` , `evli` , ` evli` , `evli` ,

`evli değil` , ` evli değil` , `evli değil` ], yerinde = Doğru )


Category_col = [ `workclass` , ` yarış` , `eğitim` , `evlilik durumu` , `meslek` ,

`ilişki` , ` cinsiyet` , `yerli-ülke` , ` gelir` ]

labelEncoder = önişleme.LabelEncoder ()


mapping_dict = {}

için sütun içinde kategori_kol:

df [col] = labelEncoder. fit_transform (df [col])


le_name_mapping = dict ( zip (labelEncoder.classes_,

labelEncoder. transform (labelEncoder.classes_)))


mapping_dict [col] = le_name_mapping

yazdır (mapping_dict)

Çıktı:

{`workclass`: {`? `: 0, `Federal devlet`: 1, `Yerel yönetim`: 2, `Hiç çalışmadı`: 3, `Özel`: 4, `Kendi kendine çalışan`: 5, `Kendi kendine çalışmıyor -inc`: 6, `State-gov`: 7,` Ücretsiz `: 8},` yarış `: {` Amer-Indian-Eskimo `: 0,` Asian-Pac-Islander `: 1,` Siyah `: 2,` Diğer `: 3,` Beyaz `: 4},` eğitim `: {` 10. `: 0,` 11. `: 1,` 12. `: 2,` 1.-4. `: 3,` 5-6`ncı `: 4,` 7-8`inci `: 5,` 9`uncu `: 6,` Doç. Yüksek Lisans`: 11, `Yüksek Lisans`: 12,` Okul Öncesi `: 13,` Prof-okul `: 14, `Bazı-kolej`: 15}, `medeni durum`: {` Boşanmış `: 0,` Evli-AF-eş `: 1,` Evli-vatandaş-eş `: 2,` Evli-eş-yok `: 3,` Hiç Evlenmemiş `: 4,` Ayrılmış `: 5,` Dul `: 6}, ` Meslek `: {`? `: 0,` Amiral `: 1,` Silahlı Kuvvetler`: 2, `El Sanatları-onarım`: 3, `Yönetim Kurulu`: 4, `Çiftçilik-balıkçılık`: 5, `İşleyiciler-temizleyiciler`: 6, `Machine-op-inspct`: 7, `Diğer-servis`: 8, `Priv-house-serv`: 9, `Prof-uzmanlık`: 10, `Koruyucu-serv`: 11, `Satış`: 12, `Teknik destek`: 13, `Ulaşım-taşıma`: 14} , `ilişki`: {`Koca`: 0, `Aileden olmayan`: 1, `Diğer akraba`: 2, `Kendisi -çocuk`: 3, `Evlenmemiş`: 4, `Karı`: 5} , `cinsiyet`: { `Kadın`: 0, `Erkek`: 1}, `yerli ülke`: {`? `: 0, `Kamboçya`: 1, `Kanada`: 2, `Çin`: 3, `Kolombiya`: 4, `Küba`: 5, `Dominik-Cumhuriyeti`: 6, `Ekvador`: 7, `El -Salvador`: 8, `İngiltere`: 9, `Fransa`: 10, `Almanya`: 11, `Yunanistan`: 12, `Guatemala`: 13, `Haiti`: 14, `Holand-Hollanda`: 15, `Honduras`: 16, `Hong`: 17, `Macaristan`: 18, `Hindistan`: 19, `İran`: 20, `İrlanda`: 21, `İtalya`: 22, `Jamaika`: 23, `Japonya `: 24, `Laos`: 25,` Meksika `: 26,` Nikaragua `: 27,` Outlying-US (Guam -USVI-etc) `: 28,` Peru `: 29,` Filipinler`: 30, ` Polonya`: 31, `Portekiz`: 32, `Porto Riko`: 33, `İskoçya`: 34, `Güney`: 35, `Tayvan`: 36, `Tayland`: 37, `Trinadad & amp; Tobago`: 38, `Birleşik Devletler`: 39, `Vietnam`: 40, `Yugos lavia`: 41}, `gelir`: { `50K`: 1}}


Modeli takma —
Ön işlemeden sonra veriler makine öğrenmesi algoritmasına aktarılmaya hazır hale gelir. Ardından, özniteliklerle etiketleri sıyırarak verileri parçalara ayırırız. Şimdi veri setini biri eğitim, diğeri test için olmak üzere iki yarıya böldük. Bu, train_test_split () sklearn işleviyle elde edilir.


sklearn. model_selection import train_test_split

sklearn.tree import DecisionTreeClassifier

< kod sınıfı = "anahtar kelime"> `dan sklearn.metrics içe aktar doğruluk_skoru


X = df.values ‚Äã‚Äã[:, 0 : 12 ]

Y = df.values ‚Äã‚Äã[:, 12 ]

< /td>

Burada dec kullandık. tahmin modeli olarak ision ağacı sınıflandırıcı. Eğitim kısmına modeli eğitmek için veriler sağladık.
Eğitim tamamlandıktan sonra, modeli test etmek için bazı veriler sağlayarak modelin doğruluğunu doğrularız.
Bu sayede bir doğruluk elde ederiz. yaklaşık %84`ü. Şimdi, bu modeli yeni bilinmeyen verilerle kullanmak için, daha sonra değerleri tahmin edebilmek için modeli kaydetmemiz gerekiyor. Bunu yapmak için Python nesnelerinin yapısını serileştirmek ve seri durumdan çıkarmak için güçlü bir algoritma olan Python`da Pickle kullanıyoruz.


< / p>

X_train, X_test, y_train , y_test = train_test_split (

X, Y, test_size = 0,3 , rastgele_durum = 100 )


dt_clf_gini = DecisionTreeClassifier (ölçüt = "gini" ,

rastgele_durum = 100 ,

maksimum_derinlik = 5 ,

min_samples_leaf = 5 )


< kod sınıfı = "plain"> dt_clf_gini.fit (X_train, y_train)

y_pred_gini = dt_clf_gini.predict (X_test)


yazdır ( "Gini Index Accuracy kullanan Karar Ağacı" ,

doğruluk_skoru (y_test, y_pred_gini) * 100 )

Çıktı:

 Gini İndeksi Doğruluğunu kullanan Karar Ağacı 83.13031016480704 

Şimdi, infüzyon —
Şişe — küçük web siteleri geliştirmek için kullanılan Python tabanlı bir mikro çerçevedir. Flask, Python kullanarak Restful API`ler oluşturmak çok kolaydır. Bu noktada, çeşitli veri özniteliklerine dayalı olarak veri sınıfını tahmin edebilen bir model.pkl modeli geliştirdik. Sınıf etiketi — Maaş" = 50K veya "50K .
Şimdi kullanıcının tüm öznitelik değerlerini ‚Äã‚Äã gireceği ve modele verilen eğitime, modele göre verilerin model tarafından alınacağı bir web uygulaması tasarlayacağız. verileri beslenen kişinin maaşının ne kadar olması gerektiğini tahmin eder.

HTML Form —
Çeşitli niteliklerden elde edilen geliri tahmin etmek için önce veri toplamamız (yeni nitelik değerleri) ve ardından gelirin 50K`dan fazla mı yoksa daha az mı olacağını tahmin etmek için yukarıda oluşturduğumuz karar ağacı modelini kullanmamız gerekir. Bu nedenle, veri toplamak için her bir özellikten seçilebilecek tüm farklı seçenekleri içeren bir HTML formu oluşturuyoruz. Burada sadece HTML kullanarak basit bir form oluşturduk. Formu daha etkileşimli hale getirmek istiyorsanız bunu yapabilirsiniz.


" html "

" gövde "

" h3 " Gelir Tahmin Formu "/ h3 "


" div "

" form action = "/ sonuç" yöntem = "POST" "

" etiket for = "yaş" " Yaş "/ etiket "

" giriş type = "metin" id = "yaş" ad = "yaş" & gt ;

" br "

" etiket for = "w_class" " İşçi Sınıfı "/ etiket "

" seçin id = "w_class" ad = "w_class" < kod sınıfı = "düz">"

" seçenek değer = "0" " Federal-gov "/ seçenek "

" seçenek değer = "1" " Yerel-hükümet "/ seçenek "

" seçenek değer = "2" " Hiç çalışmamış "/ seçenek "

" seçenek değer = "3" " Özel "/ seçenek "

" seçenek değer = "4" " Self-emp-inc "/ seçenek "

" seçenek değer = "5" " Self-emp-not-inc "/ seçenek "

" seçenek değer = "6" " Devlet-hükümet "/ seçenek "

" seçenek değer = "7" " Ödemesiz "/ seçenek "

"/ seçin "

" br "

" etiket for = "eğitim" " Eğitim "/ etiket "

" seçin id = "edu" ad = "edu" < kod sınıfı = "düz">"

" seçenek değer = "0" " 10. "/ seçenek "

" seçenek değer = "1" " 11. "/ seçenek "

" seçenek değer = "2" " 12. "/ seçenek "

" seçenek değer = "3" " 1.-4. "/ seçenek "

" seçenek değer = "4" " 5-6. "/ seçenek "

" seçenek değer = "5" " 7-8 "/ seçenek "

" seçenek değer = "6" " 9. "/ seçenek "

" seçenek değer = "7" " Doç-acdm "/ seçenek "

" seçenek değer = "8" " Doç-voc "/ seçenek "

" seçenek değer = "9" " Lisans "/ seçenek "

" seçenek değer = "10" " Doktora "/ seçenek "

" seçenek değer = "11" " HS-grad "/ seçenek "

" seçenek değer = "12" " Ustalar "/ seçenek "

" seçenek değer = "13" " okul öncesi "/ seçenek "

" seçenek değer = "14" " Prof-okul "/ seçenek "

" seçenek değer = "15" " 16 - Kolej "/ seçenek "

"/ seçin "

" br "

" etiket for = "martial_stat" " Medeni Durum "/ etiket "

" seçin id = "martial_stat" ad = "martial_stat" < kod sınıfı = "düz">"

" seçenek değer = "0" " boşanmış "/ seçenek "

" seçenek değer = "1" " evli "/ seçenek "

" seçenek değer = "2" " evli değil "/ seçenek "

"/ seçin "

" br "

kod sınıfı = "düz">" boşanmış "/ seçenek "

" seçenek değer = "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