pratique de classification de l'algorithme k-plus proche

Algorithme Python Fonctionnement pratique simple de l'algorithme k-plus proche voisin

séquence

Récemment, j'ai commencé à apprendre quelques algorithmes sur l'exploration de données, mais je n'aime pas les taper intacts selon le code du livre, je prévois donc de trouver des sources de données à modéliser et de faire des analyses en fonction de la progression de l'apprentissage. La source de données est Kaggle . Utilisez simplement ce blog comme début de l'enregistrement.

Introduction à l'algorithme

L'algorithme k-plus proche est l'un des algorithmes les plus simples. L'idée de l'algorithme est: dans l'espace des caractéristiques, si la plupart des k échantillons les plus proches (c'est-à-dire les plus proches voisins dans l'espace des caractéristiques) près d'un échantillon appartiennent à un certaine catégorie, alors l'échantillon appartient également à cette catégorie. Cet algorithme est principalement utilisé pour résoudre les problèmes de classification, que ce soit deux classification ou multi-classification peut être appliquée.
Cet article enregistre principalement l'opération réelle. Si vous voulez connaître le principe de l'algorithme spécifique, vous pouvez le trouver vous-même, ou vous pouvez vous référer à ce blog: Résumé du principe KNN

Les sources de données

Classification du verre (Kaggle): https://www.kaggle.com/uciml/glass

Insérez la description de l'image ici
Ces données divisent 7 types de verre en fonction de la composition du verre (RI, Na, Mg, Al, SI, K, Ca, Ba, Fe), et chaque type de verre (Type) est nommé d'après le nombre 1 ~ 7 .
Construisez un modèle multi-classification connu basé sur ces données.

Exploration de données

1. Importez des bibliothèques tierces

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split#划分训练集和测试集
from sklearn.neighbors import KNeighborsClassifier#导入knn算法
from sklearn.metrics import accuracy_score#导入分类评分标准

Importez tour à tour les modules nécessaires à la modélisation. En plus des quatre premières bibliothèques, qui sont des bibliothèques tierces nécessaires pour l'exploration de données, concentrez-vous sur precision_score:

sklearn.metrics.accuracy_score (y_true, y_pred, normalize = True, sample_weight = None)
normaliser: la valeur par défaut est True, qui renvoie la proportion de la classification correcte; si elle est False, le nombre d'échantillons correctement classés

Le score d'exactitude de la classification fait référence au pourcentage de toutes les classifications qui sont correctes. La précision de la classification est plus facile à comprendre, mais elle ne peut pas vous indiquer la distribution potentielle de la valeur de réponse et elle ne peut pas vous indiquer le type d'erreur que le classificateur a commis. Mais j'ai simplement construit un modèle multi-classification, ce qui est suffisant.

2. Lisez le fichier

import winreg
real_address = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',)
file_address=winreg.QueryValueEx(real_address, "Desktop")[0]
file_address+='\\'
file_origin=file_address+"\\源数据-分析\\glass.csv"#设立源数据文件的桌面绝对路径
glass=pd.read_csv(file_origin)#读取csv文件

Parce qu'à chaque fois que vous téléchargez des données, vous devez transférer le fichier dans le répertoire racine de python ou le lire dans le dossier de téléchargement, ce qui est très gênant. J'ai donc mis en place un chemin de bureau absolu via la bibliothèque winreg, de sorte que je n'ai besoin que de télécharger les données sur le bureau ou de les coller dans un dossier spécifique sur le bureau pour les lire, et elles ne seront pas confondues avec d'autres données.

3. Modélisation

Insérez la description de l'image ici

y=list(glass.columns)[:-1]
X_train,X_test,y_train,y_test=train_test_split(glass[y],glass["Type"],random_state=1)
#考虑到接下来可能需要进行其他的操作,所以定了一个随机种子,保证接下来的train和test是同一组数

L'index de la colonne divisée est la valeur de la caractéristique et la valeur de classification cible, et les données sont divisées en un ensemble d'apprentissage et un ensemble de test.

knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)

L'algorithme knn est introduit et la valeur du voisin dans l'algorithme est mise à 1, et une modélisation est effectuée pour obtenir le résultat.
Insérez la description de l'image ici

4. Notation

prediction=knn.predict(X_test)#对测试值进行预测
accuracy_score(y_test,prediction)#对结果进行评分

Utilisez knn.predict pour prédire la valeur du test et la comparer avec les balises de test précédemment divisées pour voir la précision du modèle.
Insérez la description de l'image ici
Le résultat est de 0,72, ce qui signifie que le résultat du test est à 72% cohérent avec le résultat prévu, ou que le score de précision du modèle est de 72 points.

5. Réglage simple des paramètres
Le paramètre voisin défini avant est 1, puis testez les différents paramètres à tour de rôle pour voir quel est le paramètre voisin optimal.

result={
    
    }#通过字典来记录每次的参数及对应的评分结果
for i in range(20):#参数依次从1取到20
    knn=KNeighborsClassifier(n_neighbors=(i+1))
    knn.fit(X_train,y_train)
    prediction=knn.predict(X_test)
    score=accuracy_score(y_test,prediction)
    result[i+1]=score*100
for i in result.keys():
    if result[i]==max(result.values()):
        print("最佳邻近数:"+str(i))
print("模型评分"+str(max(result.values())))

Les résultats sont les suivants: On
Insérez la description de l'image ici
peut voir que dans le processus de sélection de 1 à 20 paramètres à tour de rôle, les meilleurs paramètres voisins sont 1, 4 et 5; le meilleur score de précision du modèle est de 72 points.

6. Résumé
En fait, l'ensemble du processus n'est pas tant la modélisation, il vaut mieux faire l'expérience du processus de modélisation. De plus, l'algorithme k-plus proche n'est pas un algorithme très compliqué, et il n'implique pas certaines opérations de standardisation ou de normalisation des données, mais il y a encore quelques problèmes qui peuvent être discutés:

1. Cet algorithme peut-il être utilisé pour la classification de données textuelles, et si oui, comment l'utiliser? (J'ai déjà essayé des données textuelles, mais des erreurs ont été signalées. Qu'il s'agisse de convertir le type de données en flottant ou de convertir l'élément de texte en code ASC, la modélisation n'a pas abouti)

2. La précision de l'algorithme knn est-elle la plus petite du paramètre adjacent? Qu'en est-il de la capacité de généralisation d'autres données?
3. Existe-t-il une méthode de réglage des paramètres plus complète pour améliorer la précision du modèle?
4. L'algorithme knn peut-il être utilisé pour des problèmes de régression?

De nombreux endroits ne fonctionnent pas très bien. Les internautes sont invités à faire des suggestions.
Voici mes principales coordonnées. J'espère rencontrer des amis pour apprendre et échanger ensemble l'analyse de données et l'exploration de données.
Github : https://github.com/yb705

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43580339/article/details/111628241
conseillé
Classement