comment fait-on k signifie sur plusieurs colonnes dans les données structurées?k signifie sur les données structurées en utilisant python - plus d'une colonne
Dans l'exemple ci-dessous son été fait sur 1 colonne (nom)
tfidf_matrix = tfidf_vectorizer.fit_transform (df_new [ « nom »])
ici que le nom est utilisé, mais disons que nous voulions utiliser le nom et pays, devrais-je ajouter un pays à la même colonne comme suit?
df_new['name'] = df_new['name'] + " " + df_new['country']
tfidf_matrix = tfidf_vectorizer.fit_transform(df_new['name'])
Il fonctionne dans une perspective de code et essaie toujours de comprendre les résultats (j'ai en fait des tonnes de colonnes) les données, mais je me demande si c'est la bonne façon de s'adapter quand il y a plus d'une colonne
import os
import pandas as pd
import re
import numpy as np
df = pd.read_csv('sample-data.csv')
def split_description(string):
# name
string_split = string.split(' - ',1)
name = string_split[0]
return name
df_new = pd.DataFrame()
df_new['name'] = df.loc[:,'description'].apply(lambda x: split_description(x))
df_new['id'] = df['id']
def remove(name):
new_name = re.sub("[0-9]", '', name)
new_name = ' '.join(new_name.split())
return new_name
df_new['name'] = df_new.loc[:,'name'].apply(lambda x: remove(x))
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(
use_idf=True,
stop_words = 'english',
ngram_range=(1,4), min_df = 0.01, max_df = 0.8)
tfidf_matrix = tfidf_vectorizer.fit_transform(df_new['name'])
print (tfidf_matrix.shape)
print (tfidf_vectorizer.get_feature_names())
from sklearn.metrics.pairwise import cosine_similarity
dist = 1.0 - cosine_similarity(tfidf_matrix)
print (dist)
from sklearn.cluster import KMeans
num_clusters = range(1,20)
KM = [KMeans(n_clusters=k, random_state = 1).fit(tfidf_matrix) for k in num_clusters]
KMeans fonctionne sur des données 2D. Avez-vous essayé d'utiliser les Kmeans sur votre jeu de données original (sans les combiner en une seule colonne) et juste les convertir en colonnes numériques (comme un codage à chaud, ou binarisation) –
thx pour votre commentaire, je n'ai pas encore essayé, mais J'ai des tonnes de colonnes, pensez-vous que c'est la voie à suivre si je devais utiliser plus de 30 colonnes? (dont certaines sont des descriptions, pour lesquelles le codage ne fonctionnerait pas) –
Pour les colonnes qui ont du texte, tfidf est bon, pour les colonnes catégorielles, le codage à chaud unique sera bon. Peu importe le nombre de colonnes que vous avez, sauf si vous avez très peu de données (lignes). Si les lignes sont suffisamment grandes, c'est l'approche de base à faire. Une fois que vous avez analysé les données, d'autres techniques avancées de sélection de caractéristiques et d'ingénierie peuvent être appliquées. –