日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文本聚类与分类

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文本聚类与分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

    • @[TOC]( )
    • 引入庫
  • 一、數據預處理
    • 1.加載數據
    • 2.加載停用詞
  • 3.分詞
  • 二、數據轉換(tf-idf詞袋模型)
      • 2.1 文本轉換成詞袋模型(詞頻作為統計指標)
      • 2.2 詞頻統計指標轉換 tf-idf統計指標
      • 2.3 對詞頻向量進行降維(PCA)
  • 三、文本聚類(DBSCAN)
  • 四、sklearn調用knn和svm進行分類.
      • 4.1 KNN
      • 4.2 SVM
  • 五、分類和聚類的模型解釋

引入庫

首先導入本項目所需的所有模塊。

from LAC import LAC import warnings warnings.filterwarnings('ignore') from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.cluster import KMeans from sklearn.decomposition import PCA

以下是本篇文章正文內容。

一、數據預處理

1.加載數據

首先將文本數據和標簽數據導入。

#文本數據 f = open('x1.txt','r',encoding='utf-8') text_list = f.readlines() #標簽數據 labels = [] for line in open('y1.txt', 'r',encoding='utf-8'): #打開文件rs = line.rstrip('\n') # 移除行尾換行符labels.append(rs)

labels中標簽的解釋:

體育0
娛樂1
家具2
彩票3
房產4
教育5
時尚6
時政7
星座8
游戲9
社會10
科技11
股票12
財經13

2.加載停用詞

本文使用百度所提供的停用詞表來去除停用詞。

stopword_path = "百度停用詞表.txt" with open(stopword_path, 'r', encoding='utf-8') as f:stop_words= [line.strip() for line in f]

3.分詞

考慮中文方面分詞jieba的效果不如國內企業百度,因此使用百度的LAC模塊進行分詞,下載LAC這個庫,直接pip install lac即可。

lac = LAC(mode='lac') corpus = []for text in text_list :line = text.strip()lac_result = lac.run(line)corpus.append(' '.join(lac_result[0]))

結果上述步驟之后就完成了數據預處理,下面將處理好之后的文本數據進行轉換。

二、數據轉換(tf-idf詞袋模型)

2.1 文本轉換成詞袋模型(詞頻作為統計指標)

countVectorizer = CountVectorizer(stop_words=stop_words,analyzer="word") count_v = countVectorizer.fit_transform(corpus) # 詞袋中的詞語 print(countVectorizer.get_feature_names_out()) # 詞頻向量 print(count_v.toarray())

2.2 詞頻統計指標轉換 tf-idf統計指標

tfidfTransformer = TfidfTransformer() tfidf = tfidfTransformer.fit_transform(count_v) print(tfidf.toarray()) tfidf = tfidf.toarray()

2.3 對詞頻向量進行降維(PCA)

由于下面將使用DBSCAN算法進行聚類,考慮DBSCAN算法對數據維度敏感,不適合高緯度的數據,因此采用PCA算法對數據進行降維,將數據維度壓縮到二維。

pca = PCA(n_components=2) pca_weights = pca.fit_transform(tfidf) print(pca_weights)

三、文本聚類(DBSCAN)

DBSCAN是比較著名的基于密度的聚類方法,它可以輕松地得到各種形狀的簇。
主要有兩個參數,鄰域半徑 ? 以及鄰域內最少數據點數 minpts.

from sklearn.cluster import DBSCAN clf = DBSCAN(eps=0.16, min_samples=10) y = clf.fit_predict(tfidf) # 每個文本對應的簇的編號 (-1 在dbscan中屬于噪音簇,里面都是噪音點) print(y)

四、sklearn調用knn和svm進行分類.

劃分訓練集與測試集:

X_train = tfidf[:int(len(tfidf)*0.7)] X_test = tfidf[int(len(tfidf)*0.7):] y_train = labels[:int(len(tfidf)*0.7)] y_test = labels[int(len(tfidf)*0.7):]

4.1 KNN

KNN的全稱是K Nearest Neighbors,意思是K個最近的鄰居,從這個名字我們就能看出一些KNN算法的蛛絲馬跡了。K個最近鄰居,毫無疑問,K的取值肯定是至關重要的。那么最近的鄰居又是怎么回事呢?其實啊,KNN的原理就是當預測一個新的值x的時候,根據它距離最近的K個點是什么類別來判斷x屬于哪個類別。

from sklearn.neighbors import KNeighborsClassifier from sklearn.pipeline import Pipelineknn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train)print('KNN分類準確率為:',knn.score(X_test, y_test))

KNN分類準確率為:0.81467

4.2 SVM

支持向量機 (SVM) 是一個非常經典且高效的分類模型。盡管現在深度學習十分流行, 了解支持向量機的原理,對想法的形式化,簡化, 及一步步使模型更一般化的過程, 及其具體實現仍然有其研究價值。另一方面,支持向量機仍有其一席之地。相比深度神經網絡, 支持向量機特別擅長于特征維數多于樣本數的情況,而小樣本學習至今仍是深度學習的一大難題。

import numpy as np from sklearn import svm from sklearn.metrics import accuracy_scoreclf = svm.SVC(kernel='precomputed') gram_train = np.dot(X_train, X_train.T) clf.fit(gram_train, y_train) gram_test = np.dot(X_test, X_train.T) y_pred = clf.predict(gram_test) print('SVM分類準確率為:',accuracy_score(y_test,y_pred))

SVM分類準確率為0.86467??梢奡VM對于該文本的分類效果更好。

五、分類和聚類的模型解釋

文本聚類和文本分類最大的不同是一個是監督是學習,一個是非監督式學習。

文本分類:事先給定分類體系和訓練樣例(標注好類別信息的文本),將文本分到某個或者某幾個類別中。可用于新聞欄目分類、垃圾過濾和推薦系統等。

文本聚類:在文本方向上的應用,首先要把一個個文檔的自然語言轉換成數學信息,這樣形成高維空間點之后再去計算點與點之間的距離,然后將這些距離比較近的聚成一個簇,這些簇的中心成為簇心。而我們做的就是保證簇內點的距離足夠近,簇與簇的距離足夠遠。可用于檢索結果的聚類顯示和提高檢索結果等功能。


參考文獻:https://blog.csdn.net/lllhhhv/article/details/124267371

總結

以上是生活随笔為你收集整理的文本聚类与分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。