Menebak Jenis Kelamin Seseorang Berdasarkan Namanya Menggunakan Python Machine Learning

Prediksi Nama Python Machine Learning
Prediksi Nama Python Machine Learning
Menebak Jenis Kelamin Seseorang Berdasarkan Namanya Menggunakan Python Machine Learning - Machine Learnig sangat diperlukan dalam era sekarang ini. Kebutuhan akan pengolahan data yang sangat besar terus berkembang, tentu saja mana mungkin manusia melakukannya secara manual untuk mengolah data yang sangat besar.
Karena hal itulah diciptakan Machine Learning. Machine Learning sekarang sudah sangat mampu menggantikan tugas manusia. Dari hal sederhana misalnya. Hal sederhana yang saya maksud adalah seperti Menebak Jenis Kelamin Seseorang Berdasarkan Namanya.

Hal itulah yang akan kita bahas sekarang. Menebak gender atau jenis kelamin sangat terlihat mustahil dilakukan oleh mesin. Bahkan manusia saja terkadang salah menerka, apakah pemilik nama tersebut berjenis kelamin laki - laki atau justru perempuan.

Memanglah hal seperti ini tidak akan 100% benar, tetapi kemungkinannya tetap diatas 50% untuk mesin menebak dengan benar. Hal ini juga tidak luput dari datasets yang banyak dan beragam. Datasets yang kaya mampu menambah nilai keakuratan dari Machine Learning tentunya.

Untuk itu sebelum kita mulai kalian dianjurkan untuk mendownload terlebih dahulu datasets berisi kumpulan nama dan jenis kelamin manusia pada Laman GitHub Datasetnya. Jika sudah, mari kita mulai membangun Machine Learning sederhana kita menggunakan Python dan Scikit Learn.

Langkah Membuat Machine Learning Untuk Menebak Jenis Kelamin

Nah dalam membangun Machine Learning berikut, kita memerlukan dua buah module external, yaitu Scikit Learn sebagai Otak Machine Learning nya, kemudian Numpy agar proses array kita berjalan lebih cepat dibanding List built - in Python.

1. Mengimport Module Machine Learning

Hal pertama yang kita lakukan adalah import semua module yang kita butuh kan tersebut,

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split as tts
from sklearn.linear_model import SGDClassifier
import numpy as np

Nah, di project Machine Learning kali ini kita memerlukan fungsi Train test split dan SGDClassifier dari module SKLearn.

Bagi yang belum tahu TfidfVectorizer adalah Algoritma Machine Learning berdasarkan TF-IDF yang khusus mengolah kata - kata dari sebuah dokumen. TF adalah Term Frequency, mencari berapa banyak kata yang dimaksud dalam kata tersebut.

Kemudian IDF adalah Inverse Document Frequency untuk mencari kata yang dimaksud tersebut lebih berat ke sisi mana ? Atau gampangnya ibarat pertandingan babak penyisihan dilakukan oleh TF dan IDF menentukan siapa juaranya.

Apa itu Train test split? Train test split berguna untuk memecah data kita secara random kedalam dua bagian yaitu bagian untuk train (latihan) dan test (data sebenarnya). Jadi dengan menggunakan metode ini hasil prediksi diharapkan lebih akurat.

Kemudian apa itu SGDClassifier ? SGD berarti StochasticGradient Descent, fungsiya membelah data menjadi dua dengan garis yang memiliki gradient atau kemiringan tertentu. Nanti data dapat diprediksi data berada pada kubu mana, dalam kasus ini data akan diprediksi dalam kubu "Male" atau "Female"

2. Mendefinisikan Titik Awal Machine Learning

Maksudnya mendefinisikan titik awal adalah, kita siapkan semuanya sebelum masuk kepada proses prediksi, pada tahap ini kita definisikan metode Machine Learning kita, kemudian definisikan datasets yang telah kita download tadi, dan membuat list kosong penampung data. Berikut codenya

clf = SGDClassifier(loss='log')
tf = TfidfVectorizer()

DATA_PATH = "data-2.csv"

X, y = [], []


Diatas terlihat kita memberikan argumen loss='log' didalam SGDClassifier, artinya disini kita menggunakan Logistic regression yang artinya garis gradien kita nantinya akan berbentuk seperti kurva yang menyesuaikan dengan bentuk data, jadi sangat flexibel terhadap data.
Baca Juga: Mengenal K-Nearest Neighbors dan Penerapannya dalam Python Machine Learning
Disini perlu diperhatikan agar DATA_PATH harus benar, dan jika diletakkan di folder terpisah dari script Python kamu maka definisikan path dengan benar jangan sampai salah alamat meskipun satu huruf saja !

3. Mengisi List Data Machine Learning dengan Datasets

List X dan y tersebut akan kita isi dengan data data dari datasets kita. Caranya kita tahu bahwa pada datasets yang telah kalian download berisi list nama orang dan jenis kelaminnya terdefinisi dalam 'm' untuk Male dan 'f' untuk Female yang dipisahkan oleh koma.

Maka kita separate atau pisahkan data tersebut berdasar koma dengan split() method, kemudian kita tambahkan elemen pertama yang berupa nama pada X dan jenis kelamin pada y. berikut codenya

with open(DATA_PATH, 'r') as f:
    for line in f:
        X.append(line.split(',')[0].lower())
        y.append(line.split(',')[1].strip('\n'))


Kemudian kita ubah y menjadi Numpy Array dan ubah "m" menjadi angka 1 dan "f" menjadi angka 0 menggunakan where method Numpy, hal ini karena Scikit learn lebih mudah mengolah angka daripada kata - kata. Berikut codenya

y = np.array(y)
y = np.where(y == 'm', 1, 0)


Nah sampai disini kita sudah memiliki data yang benar dan sesuai kategori yang dianjurkan oleh Scikit Learn yaitu memisah features dan labels.

4. Train dan Fit Data Machine Learning

Seperti yang saya katakan bahwa Scikit Learn lebih mudah mengolah angka, maka pada bagian kali ini kita akan gunakan fit_transform method dari TfidfVectorizer untuk mengubah nama - nama orang tadi menjadi sekumpulan angka ajaib dan langsung di fit dengan pasangannya, Male atau Female.

Tapi sebelumnya kita akan bagi 2 data kita sama rata, untuk bagian Train dan Test. Ini umum dilakukan pada Data Science agar menambah nilai keakuratan prediksi pada data dalam skala besar. Berikut codenya

X_train, X_test, y_train, y_test = tts(X, y, test_size=0.5)
x_train = tf.fit_transform(X_train)

clf.fit(x_train, y_train)


Jika kalian ingin melihat bagaimana angka ajaibnya, silahkan kalian ketik print(x_train) lalu run program kalian.
Baca Juga: Contoh Tree Classifier Sederhana pada Python Machine Learning
Sampai langkah ke empat sekarang ini pastikan code kalian sudah benar. Code kalian harus terlihat seperti ini.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split as tts
from sklearn.linear_model import SGDClassifier
import numpy as np

clf = SGDClassifier(loss='log')
tf = TfidfVectorizer()

DATA_PATH = "D:\ML_Predict_Name-master\data\data-2.csv"

X, y = [], []

with open(DATA_PATH, 'r') as f:
for line in f:
X.append(line.split(',')[0].lower())
y.append(line.split(',')[1].strip('\n'))

y = np.array(y)
y = np.where(y == 'm', 1, 0)

X_train, X_test, y_train, y_test = tts(X, y, test_size=0.5)
x_train = tf.fit_transform(X_train)

clf.fit(x_train, y_train)


5. Membuat Fungsi Prediksi dan Looping Machine Learning

Kemudian untuk mulai memprediksi nama kita akan masukkan kedalam fungsi. Kenapa ? Hal ini karena kita akan loop selamanya dan memanggil fungsi ini nanti untuk memprediksi jenis kelamin berdasar nama seseorang. Berikut codenya

def predict(nama):
    name = tf.transform([nama])
    pred = clf.predict(name)[0]
    prob_gender = "Male" if pred == 1 else "Female"
    return prob_gender

Terlihat disana kita melakukan tranform lagi kepada nama yang akan kita masukkan nanti. Ini tentunya agar format data menjadi valid untuk memprediksi nama berdasaran data yang sebelumnya sudah di transform juga.

Kemudian kalau kalian memprint x_train tadi, terlihat ada 2 deret angka, nah untuk memprediksi itu kita perlukan deret yang pertama saja, oleh karena itu tambahan [0] diberikan. Kemudian jika hasil prediksi didapatkan maka kita ubah kembali angka 0 dan 1 tadi menjadi Female dan Male.

Kemudian kita membuat Loop selamanya untuk mesin memprediksi jenis kelamin terus menerus untuk setiap nama yang diinput. Berikut codenya.

while True:
    nama = input("Masukkan Nama: ")
    gender = predict(nama)
    print(f"Name {nama} is predicted {gender} gender\n")


KESIMPULAN

Nah bagaimana mudah bukan ?! Sekarang code kalian harus terlihat seperti ini.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split as tts
from sklearn.linear_model import SGDClassifier
import numpy as np

clf = SGDClassifier(loss='log')
tf = TfidfVectorizer()

DATA_PATH = "D:\ML_Predict_Name-master\data\data-2.csv"

X, y = [], []

with open(DATA_PATH, 'r') as f:
    for line in f:
        X.append(line.split(',')[0].lower())
        y.append(line.split(',')[1].strip('\n'))

y = np.array(y)
y = np.where(y == 'm', 1, 0)

X_train, X_test, y_train, y_test = tts(X, y, test_size=0.5)
x_train = tf.fit_transform(X_train)

clf.fit(x_train, y_train)

def predict(nama):
    name = tf.transform([nama])
    pred = clf.predict(name)[0]
    prob_gender = "Male" if pred == 1 else "Female"
    return prob_gender

while True:
    nama = input("Masukkan Nama: ")
    gender = predict(nama)
    print(f"Name {nama} is predicted {gender} gender\n")


Sebenarnya hasil prediksi yang dikeluarkan tidak selalu benar. kalian bisa tes dengan nama orang - orang disekitar kalian dan jika ada kesalahan prediksi kalian bisa membuat code untuk otomatis menambahkan nama dan gender yang tepat pada Datasets.

Berikut Screenshot code ini ketika dijalankan:

Hasil Machine Learning tebak jenis kelamin
Lihat kan, beberapa prediksi gender tidak sesuai dengan namanya. Sedikit tips agar IDF nya lebih bekerja akurat, kalian bisa tambahkan nama yang dimaksud beserta gender nya lebih dari satu kali didalam Datasets.

Code diatas berhasil saya tambahkan kedalam Artificial Intelligence saya yang sudah saya berikan tutorialnya disini Tutorial Membuat GUI A.I. Chatbot Bersuara seperti Jarvis dengan Python dan AIML.

Dan juga saya dapat membuat code otomatis update Datasets saat gender salah diprediksi. Sengaja tidak saya tampilkan disini agar kalian bisa berkreasi sendiri dan bukannya tinggal copy paste code disini.

Demikianlah Tutorial Menebak Jenis Kelamin Seseorang Berdasarkan Namanya Menggunakan Python Machine Learning. Silahkan bertanya di kolom komentar jika ada pertanyaan terkait tutorial kali ini.

Share this

Related Posts

Previous
Prev Post »

2 komentar

komentar
10 Oktober, 2017 17:04 delete

Sudah bisa sob :) Terima kasih pemberitahuannya

Reply
avatar
16 Januari, 2019 06:49 delete

Gan mohon maaf datasetnya udah gabisa di download ya. Bagaimana ini?

Reply
avatar

Visitor baik, selalu tinggalkan jejak.
Silahkan komen yang relevan & tidak berlebihan, tidak berbau SARA & Pornografi, tidak mengandung promosi.
^ _ ^ Happy Blogging !