Loading

import pandas as pd
import numpy as np
# import matplotlib.pyplot as plt
# import seaborn as sns
import time
myData = pd.read_csv("../../scikit-learn-mooc/datasets/adult-census.csv")
myData = myData.drop(columns="education-num")
myData.head()
age workclass education marital-status occupation relationship race sex capital-gain capital-loss hours-per-week native-country class
0 25 Private 11th Never-married Machine-op-inspct Own-child Black Male 0 0 40 United-States <=50K
1 38 Private HS-grad Married-civ-spouse Farming-fishing Husband White Male 0 0 50 United-States <=50K
2 28 Local-gov Assoc-acdm Married-civ-spouse Protective-serv Husband White Male 0 0 40 United-States >50K
3 44 Private Some-college Married-civ-spouse Machine-op-inspct Husband Black Male 7688 0 40 United-States >50K
4 18 ? Some-college Never-married ? Own-child White Female 0 0 30 United-States <=50K
print(f"The dataset data contains {myData.shape[0]} samples and {myData.shape[1]} features")
The dataset data contains 48842 samples and 13 features
target_column = 'class'
target = myData[target_column]
data = myData.drop(columns=target_column)
myData.dtypes
age                int64
workclass         object
education         object
marital-status    object
occupation        object
relationship      object
race              object
sex               object
capital-gain       int64
capital-loss       int64
hours-per-week     int64
native-country    object
class             object
dtype: object
from sklearn.compose import make_column_selector as selector
# 
numerical_columns = selector(dtype_exclude=object)(data)
categorical_columns = selector(dtype_include=object)(data)
all_columns = numerical_columns + categorical_columns
data = data[all_columns]
data_numerical = data[numerical_columns]
data_categorical = data[categorical_columns]
print(f"The dataset data contains {data.shape[0]} samples and {data.shape[1]} features")
The dataset data contains 48842 samples and 12 features

Split data in train and test

from sklearn.model_selection import train_test_split
# 
data_train, data_test, target_train, target_test = train_test_split(
    data_numerical, target, random_state=42, test_size=0.25)
print(f"Number of samples in testing: {data_test.shape[0]} => "
      f"{data_test.shape[0] / data_numerical.shape[0] * 100:.1f}% of the"
      f" original set")
Number of samples in testing: 12211 => 25.0% of the original set

Classification model : K-nearest neighbors

from sklearn.neighbors import KNeighborsClassifier
# 
model = KNeighborsClassifier()
start = time.time()
model.fit(data_train, target_train);
elapsed_time = time.time() - start
accuracy = model.score(data_test, target_test)
model_name = model.__class__.__name__
score = model.score(data_test, target_test)
print(f"The accuracy using a {model_name} is {score:.3f} "
      f"with a fitting time of {elapsed_time:.3f} seconds ")
The accuracy using a KNeighborsClassifier is 0.812 with a fitting time of 0.055 seconds 

Classification model : LogisticRegression

from sklearn.linear_model import LogisticRegression
# 
model = LogisticRegression()
start = time.time()
model.fit(data_train, target_train);
elapsed_time = time.time() - start
accuracy = model.score(data_test, target_test)
model_name = model.__class__.__name__
score = model.score(data_test, target_test)
print(f"The accuracy using a {model_name} is {score:.3f} "
      f"with a fitting time of {elapsed_time:.3f} seconds ")
The accuracy using a DummyClassifier is 0.766 with a fitting time of 0.020 seconds 

Classification model : DummyClassifier

from sklearn.dummy import DummyClassifier
# 
model = DummyClassifier(strategy="constant", constant=" >50K")
start = time.time()
model.fit(data_train, target_train);
elapsed_time = time.time() - start
accuracy = model.score(data_test, target_test)
model_name = model.__class__.__name__
score = model.score(data_test, target_test)
print(f"The accuracy using a {model_name} is {score:.3f} "
      f"with a fitting time of {elapsed_time:.3f} seconds ")
The accuracy using a DummyClassifier is 0.234 with a fitting time of 0.012 seconds 

and with the most frequent (<=50K)

model = DummyClassifier(strategy="most_frequent")
start = time.time()
model.fit(data_train, target_train);
elapsed_time = time.time() - start
accuracy = model.score(data_test, target_test)
model_name = model.__class__.__name__
score = model.score(data_test, target_test)
print(f"The accuracy using a {model_name} is {score:.3f} "
      f"with a fitting time of {elapsed_time:.3f} seconds ")
The accuracy using a DummyClassifier is 0.766 with a fitting time of 0.020 seconds