ML | Diagnosi di cancro al seno Kaggle Wisconsin utilizzando KNN

| | |

Implementazione dell’algoritmo CNN per la classificazione.

Codice: caricamento librerie

# fare algebra lineare

import numpy as np


# elaborazione dati < /p>

importa panda come pd


# rendering

import matplotlib.pyplot as plt

Codice: carica set di dati

df = pd.read_csv ( ". . breast-cancer-wisconsin-data data.csv" )

< /p>

print (data.head)

Output:

Codice: Carica set di dati

df.info ()

Output: < /p>

 RangeIndex: 569 voci, da 0 a 568 Colonne di dati (totale 33 colonne): id 569 non null int64 diagnostic 569 oggetto non nullo raggio_mean 569 non null float64 texture_mean 569 non null float64 perimetro_mean 569 non-null null float64 area_mean 569 non-nu ll float64 smoothness_mean 569 non null float64 compactness_mean 569 non null float64 concavity_mean 569 non null float64 concave points_mean 569 non null float64 symmetry_mean 569 non null float64 texture-fractal_mean 569 non-radius_ null float 569 non null float69 perimetro_se 56 -null float64 area_se 569 float non nullo64 ​​smoothness_se 569 float non nullo64 ​​compactness_se 569 float non nullo64 ​​concavity_se 569 float non nullo64 ​​punti concavi_se 569 float non nullo64 ​​symmetry_se 569 float non nulldimension64 float non nullo64 ​​raggio_worst 569 float non nullo64 texture_worst 569 float non nullo64 ​​perimetro_worst 569 float non nullo64 ​​area_worst 569 float non nullo64 ​​smoothness_worst 569 float non nullo64 ​​compactness_worst 569 float non nullo64 ​​concavity_worst 569 float non nullo64 ​​concavity_worst punti nullc 569 float non nullo64 ​​concavity_worst nullc -null 569 float64 non nullo fractal_dimension_worst 569 float64 non nullo Senza nome: 32 0 float64 non nullo dtypes: float64 (31), int64 (1), oggetto (1) utilizzo della memoria: 146,8+ KB 

Codice: stiamo eliminando le colonne — "Id" e "Unnamed: 32" poiché non svolgono alcun ruolo nelle previsioni.

df.drop ([ ’Senza nome: 32’ , ’ id’ ], asse = 1 )

print (df .shape)

Esci:

 (569, 31) 

Converti i valori diagnostici M e B in valori numerici
M (maligno) = 1
B (benigno) = 0

< td class = "code">

def diagnostic_value (diagnosi):

if diagnosi = = ’M’ :

ritorno 1

else :

return 0

df [ ’diagnosis’ ] = df [ ’ diagnostic’ < /codice> ]. applica (diagnosis_value)

tabella>

Codice:

sns.lmplot (x = ’radius_mean’ , y = ’texture_mean’ , tonalità = ’diagnosi’ , dati = df) < /p>

Esci:

 < figure class = "aligncenter amp-wp-inline-aae3cd945e6352f265a91202c2b420cd">    

Codice:

sns.lmplot (x = ’ smoothness_mean’ , y = ’compactness_mean’ ,

dati = df, tonalità = ’diagnosi’ )

Output:

 

Codice: input e output

X = np.array (df.iloc [:, 1 :])

y = np.array (df [ ’diagnosis’ ])

Codice: separare i dati per l’addestramento e i test

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split (

X, y, test_size = 0.33 , random_state = 42 )

Codice: utilizzo di Sklearn

knn = KNeighborsClassifier (n_neighbors = 13 )

knn.fit (X_train, y_train)

Esci:

 KNeighborsClassifier (algorithm = ’auto’ , leaf_size = 30, metric = ’minkowski’, metric_params = Nessuno, n_jobs = Nessuno, n_neighbors = 13, p = 2, weights = ’uniforme’) 

Codice: punteggio di previsione

knn.score (X_test, y_test)

Uscita:

 0,9627659574468085 

Codice: convalida incrociata

neighbors = []

cv_scores = []

da sklearn.model_selection import cross_val_score

# fai 10 volte la convalida incrociata

for k in range ( 1 , 51 , 2 ):

neighbors.append (k)

< codice classe ="plain "> knn = KNeighborsClassifier (n_neighbors = k)

punteggi = cross_val_score (

knn , X_train, y_train, cv = 10 , punteggio = ’accuratezza’ )

cv_scores.append (scores.mean ())

Codice: errore di classificazione rispetto a k

MSE = [ 1 - x for x in cv_scores]


# determinazione del k migliore

ottimali_k = neighbors [MSE.index ( min (MSE))] p>

print ( ’ Il numero ottimale di neighbor è% d ’ % optim_k)


# errore di errata classificazione del grafico rispetto a k

plt.figure (figsize = ( 10 , 6 ))

plt.plot (neighbors, MSE)

plt.xlabel ( ’Numero di vicini’ )

plt.ylabel ( ’Errore di classificazione errata’ )

plt. mostra ()

Esci :

 Il numero ottimale di neighbor è 13