Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Rete Neurale Keras


Creazione di una rete neurale per la diagnosi di un tumore.
Codice ottenuto da chatGPT e testato in Google Colab

Rete Neurale con Keras


Il codice di questa rete neurale, impostando il prompt che segue

Prompt di cahtGPT


Nel linguaggio python, crea una rete neurale con keras
Leggi il data base:
https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data
Di questo data base sepcifica le colonne.
La colonna target y è dignosis
Per le fixuteres X non usare le colonne diagnosis e id
X = breast_cancer.drop(['diagnosis','id'],axis=1).values
Y = breast_cancer['diagnosis'].values
Crea gli array di numpy, per addestrare e testare la reti neurale
Splitta il data set in training e test (20% del data set)
Poichè le label sono categoriche e di dimensioni diverse:
-Per prima cosa usa labelencoder per trasformare la variabile categorica in numerica -Poi standardizza le features X usando StandardScaler()

Adesso costruiamo la rete neurale artificiale, così composta :

  • 30 nodi nello strato di input, pari al numero di features del dataset.
  • 12 nodi nello strato nascosto, numero scelto arbitrariamente da noi.
  • 1 nodo nello strato di output, dato che si tratta di una classificazione binaria.

La funzione di attivazione che utilizzeremo per lo strato nascosto è la ReLU,
mentre, trattandosi di un problema di classificazione binaria, per lo strato di output utilizzeremo la sigmoide.

Utilizziamo il metodo compile per configurare la fase di addestramento, specificando come funzione di ottimizzazione lo Stochastic Gradient Descent, come funzione da minimizzare la binary cross entropy e aggiungiamo come metrica aggiuntiva da visualizzare durante l'addestramento l'accuracy.
Per ottenere il numero di parametri della rete usiamo model.summary()

Per l'addestramento usiamo 100 epoche

Stampiamo sia l'accuracy del data set di training che di test



Risposta di ChatGPT: diagnosi del tumore

Ecco il codice Python che implementa quanto richiesto utilizzando Keras:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from keras.models import Sequential
from keras.layers import Dense

# Caricamento del dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data"
breast_cancer = pd.read_csv(url, header=None)

# Specifica delle colonne
columns = ['id', 'diagnosis', 'mean_radius', 'mean_texture', 'mean_perimeter', 'mean_area',
           'mean_smoothness', 'mean_compactness', 'mean_concavity', 'mean_concave_points',
           'mean_symmetry', 'mean_fractal_dimension', 'radius_se', 'texture_se', 'perimeter_se',
           'area_se', 'smoothness_se', 'compactness_se', 'concavity_se', 'concave_points_se',
           'symmetry_se', 'fractal_dimension_se', 'worst_radius', 'worst_texture', 'worst_perimeter',
           'worst_area', 'worst_smoothness', 'worst_compactness', 'worst_concavity',
           'worst_concave_points', 'worst_symmetry', 'worst_fractal_dimension']
breast_cancer.columns = columns

# Rimuovere colonne 'id' e 'diagnosis'
X = breast_cancer.drop(['diagnosis', 'id'], axis=1).values
Y = breast_cancer['diagnosis'].values

# Label Encoding per la variabile target Y
label_encoder = LabelEncoder()
Y = label_encoder.fit_transform(Y)

# Standardizzazione delle features X
scaler = StandardScaler()
X = scaler.fit_transform(X)

# Divisione in training e test set
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)

# Costruzione della rete neurale
model = Sequential()
model.add(Dense(12, input_dim=X.shape[1], activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# Compilazione del modello
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])

# Stampa della struttura del modello
model.summary()

# Addestramento del modello
model.fit(X_train, Y_train, epochs=100, verbose=0)

# Valutazione dell'accuracy su training e test set
train_acc = model.evaluate(X_train, Y_train, verbose=0)[1]
test_acc = model.evaluate(X_test, Y_test, verbose=0)[1]

print("Accuracy sul training set:", train_acc)
print("Accuracy sul test set:", test_acc)

Questo codice crea una rete neurale artificiale con uno strato di input di 30 nodi, uno strato nascosto di 12 nodi e uno strato di output con 1 nodo per la classificazione binaria.
Utilizza la funzione di attivazione ReLU per lo strato nascosto e la funzione di attivazione sigmoide per lo strato di output.
La rete viene addestrata utilizzando lo Stochastic Gradient Descent come ottimizzatore e la binary cross entropy come funzione di loss.
Infine, viene stampata la struttura del modello e le accuracy sia sul training set che sul test set.

Il codice testato su Google Colab, restituisce:

  • Accuracy sul training set: 0.9736263751983643
  • Accuracy sul test set: 0.9912280440330505
  • model.sumary() indica 385 parametri