Guest User

Untitled

a guest
Nov 30th, 2020
585
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import matplotlib.cm as cm
  5. from matplotlib import offsetbox
  6.  
  7. from sklearn.cluster import MiniBatchKMeans
  8. from sklearn.feature_extraction.text import TfidfVectorizer
  9. from sklearn.decomposition import PCA
  10. from sklearn.manifold import TSNE
  11.  
  12.  
  13. document = ['incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete','incident','install','delete']
  14.  
  15. sizelist = len(document)
  16. tfidf = TfidfVectorizer(
  17. min_df = 5,
  18. max_df = 0.95,
  19. max_features = 8000,
  20. stop_words = 'english'
  21. )
  22. tfidf.fit(document)
  23. text = tfidf.transform(document)
  24.  
  25.  
  26.  
  27.  
  28. def find_optimal_clusters(data, max_k):
  29. iters = range(2, max_k+1, 2)
  30.  
  31. sse = []
  32. for k in iters:
  33. sse.append(MiniBatchKMeans(n_clusters=k, init_size=1024, batch_size=2048, random_state=20).fit(data).inertia_)
  34. print('Fit {} clusters'.format(k))
  35.  
  36. f, ax = plt.subplots(1, 1)
  37. ax.plot(iters, sse, marker='o')
  38. ax.set_xlabel('Cluster Centers')
  39. ax.set_xticks(iters)
  40. ax.set_xticklabels(iters)
  41. ax.set_ylabel('SSE')
  42. ax.set_title('SSE by Cluster Center Plot')
  43.  
  44. find_optimal_clusters(text, 10)
  45.  
  46.  
  47. clusters = MiniBatchKMeans(n_clusters=6, init_size=1024, batch_size=2048, random_state=20).fit_predict(text)
  48.  
  49. def plot_tsne_pca(data, labels, sizelist):
  50. max_label = max(labels)
  51. max_items = np.random.choice(range(data.shape[0]), sizelist, replace=False)
  52.  
  53. pca = PCA(n_components=2).fit_transform(data[max_items,:].todense())
  54. tsne = TSNE().fit_transform(PCA(n_components=1).fit_transform(data[max_items,:].todense()))
  55.  
  56. idx = np.random.choice(range(pca.shape[0]), sizelist, replace=False)
  57. label_subset = labels[max_items]
  58. label_subset = [cm.hsv(i/max_label) for i in label_subset[idx]]
  59. f, ax = plt.subplots(1, 2, figsize=(20, 6))
  60.  
  61. ax[0].scatter(pca[idx, 0], pca[idx, 1], c=label_subset)
  62. ax[0].set_title('PCA Cluster Plot')
  63.  
  64. sc = ax[1].scatter(tsne[idx, 0], tsne[idx, 1], c=label_subset, cmap='tab10')
  65. ax[1].set_title('TSNE Cluster Plot')
  66. ax[1].legend(*sc.legend_elements(), title='clusters')
  67.  
  68.  
  69.  
  70. plot_tsne_pca(text, clusters, sizelist)
  71.  
  72. def get_top_keywords(data, clusters, labels, n_terms):
  73. df = pd.DataFrame(data.todense()).groupby(clusters).mean()
  74.  
  75. for i,r in df.iterrows():
  76. print('\nCluster {}'.format(i))
  77. print(','.join([labels[t] for t in np.argsort(r)[-n_terms:]]))
  78.  
  79. get_top_keywords(text, clusters, tfidf.get_feature_names(), 6)
  80.  
  81. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment