Compare commits
No commits in common. "abfc877c7d1a96d53d89d3d0c407883566cee7a7" and "3848a25c32b1aac4c4eaf8638e1c6681c9427259" have entirely different histories.
abfc877c7d
...
3848a25c32
@ -1,26 +0,0 @@
|
|||||||
#+TITLE: Práctica 3
|
|
||||||
#+SUBTITLE: Inteligencia de Negocio
|
|
||||||
#+AUTHOR: Amin Kasrou Aouam
|
|
||||||
#+DATE: 2021-01-01
|
|
||||||
#+PANDOC_OPTIONS: template:~/.pandoc/templates/eisvogel.latex
|
|
||||||
#+PANDOC_OPTIONS: listings:t
|
|
||||||
#+PANDOC_OPTIONS: toc:t
|
|
||||||
#+PANDOC_METADATA: lang=es
|
|
||||||
#+PANDOC_METADATA: titlepage:t
|
|
||||||
#+PANDOC_METADATA: listings-no-page-break:t
|
|
||||||
#+PANDOC_METADATA: toc-own-page:t
|
|
||||||
#+PANDOC_METADATA: table-use-row-colors:t
|
|
||||||
#+PANDOC_METADATA: logo:/home/coolneng/Photos/Logos/UGR.png
|
|
||||||
* Práctica 3
|
|
||||||
** Introducción
|
|
||||||
|
|
||||||
En esta práctica, resolveremos un problema de clasificación multiclase, en concreto, trataremos de predecir la categoría de precio de una serie de coches
|
|
||||||
|
|
||||||
** Preprocesamiento de datos
|
|
||||||
*** Valores nulos
|
|
||||||
*** Valores no numéricos
|
|
||||||
*** Balanceo de clases
|
|
||||||
** Elección de algoritmo
|
|
||||||
** Configuración del algoritmo
|
|
||||||
** Resultados obtenidos
|
|
||||||
** Análisis de resultados
|
|
@ -1,7 +1,6 @@
|
|||||||
from pandas import DataFrame, read_csv
|
from pandas import DataFrame, read_csv
|
||||||
from sklearn.preprocessing import LabelEncoder
|
from sklearn.preprocessing import LabelEncoder
|
||||||
from sklearn.model_selection import KFold
|
from sklearn.model_selection import KFold
|
||||||
from imblearn.combine import SMOTETomek
|
|
||||||
|
|
||||||
|
|
||||||
def construct_dataframes(train, test):
|
def construct_dataframes(train, test):
|
||||||
@ -13,17 +12,16 @@ def construct_dataframes(train, test):
|
|||||||
return df_list
|
return df_list
|
||||||
|
|
||||||
|
|
||||||
def rename_columns(df_list) -> DataFrame:
|
|
||||||
for df in df_list:
|
|
||||||
df.columns = df.columns.str.lower()
|
|
||||||
return df_list
|
|
||||||
|
|
||||||
|
|
||||||
def drop_null_values(df_list):
|
def drop_null_values(df_list):
|
||||||
for df in df_list:
|
for df in df_list:
|
||||||
df.dropna(inplace=True)
|
df.dropna(inplace=True)
|
||||||
df.drop(columns="tipo_marchas", inplace=True)
|
df.drop(columns="Tipo_marchas", inplace=True)
|
||||||
df["descuento"].fillna(0)
|
return df_list
|
||||||
|
|
||||||
|
|
||||||
|
def rename_columns(df_list) -> DataFrame:
|
||||||
|
for df in df_list:
|
||||||
|
df.columns = df.columns.str.lower()
|
||||||
return df_list
|
return df_list
|
||||||
|
|
||||||
|
|
||||||
@ -57,26 +55,6 @@ def encode_columns(df_list):
|
|||||||
return df_list
|
return df_list
|
||||||
|
|
||||||
|
|
||||||
def split_data_target(df, dataset):
|
|
||||||
if dataset == "data":
|
|
||||||
df.drop(columns="id", inplace=True)
|
|
||||||
data = df.drop(columns=["precio_cat"])
|
|
||||||
target = df["precio_cat"]
|
|
||||||
else:
|
|
||||||
data = df.drop(columns=["id"])
|
|
||||||
target = df["id"]
|
|
||||||
return data, target
|
|
||||||
|
|
||||||
|
|
||||||
def balance_training_data(df):
|
|
||||||
smote_tomek = SMOTETomek(random_state=42)
|
|
||||||
data, target = split_data_target(df=df, dataset="data")
|
|
||||||
balanced_data, balanced_target = smote_tomek.fit_resample(data, target)
|
|
||||||
balanced_data_df = DataFrame(balanced_data, columns=data.columns)
|
|
||||||
balanced_target_df = DataFrame(balanced_target, columns=target.columns)
|
|
||||||
return balanced_data_df, balanced_target_df
|
|
||||||
|
|
||||||
|
|
||||||
def split_k_sets(df):
|
def split_k_sets(df):
|
||||||
k_fold = KFold(shuffle=True, random_state=42)
|
k_fold = KFold(shuffle=True, random_state=42)
|
||||||
return k_fold.split(df)
|
return k_fold.split(df)
|
||||||
@ -88,6 +66,4 @@ def parse_data(train, test):
|
|||||||
processed_df_list = drop_null_values(renamed_df_list)
|
processed_df_list = drop_null_values(renamed_df_list)
|
||||||
numeric_df_list = trim_column_names(processed_df_list)
|
numeric_df_list = trim_column_names(processed_df_list)
|
||||||
encoded_df_list = encode_columns(numeric_df_list)
|
encoded_df_list = encode_columns(numeric_df_list)
|
||||||
train_data, train_target = balance_training_data(encoded_df_list[0])
|
return encoded_df_list
|
||||||
test_data, test_ids = split_data_target(encoded_df_list[1], dataset="test")
|
|
||||||
return train_data, train_target, test_data, test_ids
|
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
from numpy import mean
|
|
||||||
from pandas import DataFrame
|
|
||||||
from sklearn.metrics import accuracy_score
|
|
||||||
from sklearn.model_selection import cross_val_score
|
|
||||||
from sklearn.ensemble import GradientBoostingClassifier
|
|
||||||
|
|
||||||
from preprocessing import parse_data, split_k_sets
|
|
||||||
|
|
||||||
|
|
||||||
def predict_data(train_data, train_target, test_data, test_ids):
|
|
||||||
model = GradientBoostingClassifier(random_state=42)
|
|
||||||
accuracy_scores = []
|
|
||||||
for train_index, test_index in split_k_sets(train_data):
|
|
||||||
model.fit(train_data.iloc[train_index], train_target.iloc[train_index])
|
|
||||||
prediction = model.predict(train_data.iloc[test_index])
|
|
||||||
accuracy_scores.append(
|
|
||||||
accuracy_score(train_target.iloc[test_index], prediction)
|
|
||||||
)
|
|
||||||
cv_score = cross_val_score(model, train_data, train_target)
|
|
||||||
evaluate_performance(
|
|
||||||
accuracy=mean(accuracy_scores),
|
|
||||||
cv_score=mean(cv_score),
|
|
||||||
)
|
|
||||||
predictions = model.predict(test_data)
|
|
||||||
export_results(ids=test_ids, prediction=predictions)
|
|
||||||
|
|
||||||
|
|
||||||
def evaluate_performance(accuracy, cv_score):
|
|
||||||
print("Accuracy Score: " + str(accuracy))
|
|
||||||
print("Cross validation score: " + str(cv_score))
|
|
||||||
|
|
||||||
|
|
||||||
def export_results(ids, prediction):
|
|
||||||
result_df = DataFrame({"id": ids, "Precio_cat": prediction})
|
|
||||||
result_df.to_csv(path_or_buf="data/results.csv", index=False)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
train_data, train_target, test_data, test_ids = parse_data(
|
|
||||||
train="data/train.csv", test="data/test.csv"
|
|
||||||
)
|
|
||||||
predict_data(
|
|
||||||
train_data=train_data,
|
|
||||||
train_target=train_target,
|
|
||||||
test_data=test_data,
|
|
||||||
test_ids=test_ids,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
Loading…
Reference in New Issue
Block a user