文字分類 機器學習方法

2021-09-12 07:43:53 字數 3188 閱讀 1962

##不好意思最近事情有點多下次在完善一下

匯入常用包

import random

import jieba

import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.feature_extraction.text import countvectorizer

from sklearn.*****_bayes import multinomialnb

載入文字與停用詞

#載入停用詞

stop_words = "".join(['stopwords.txt'])

stopwords=pd.read_csv(stop_words,index_col=false,quoting=3,sep="\t",names=['stopword'], encoding='utf-8')

stopwords=stopwords['stopword'].values

laogong = "".join(['beilaogongda.csv'])

laopo = "".join(['beilaopoda.csv'])

erzi = "".join(['beierzida.csv'])

nver = "".join(['beinverda.csv'])

#載入文字

laogong_df = pd.read_csv(laogong, encoding='utf-8', sep=',')

laopo_df = pd.read_csv(laopo, encoding='utf-8', sep=',')

erzi_df = pd.read_csv(erzi, encoding='utf-8', sep=',')

nver_df = pd.read_csv(nver, encoding='utf-8', sep=',')

對於文字進行處理

#刪除文字的nan行

laogong_df.dropna(inplace=true)

laopo_df.dropna(inplace=true)

erzi_df.dropna(inplace=true)

nver_df.dropna(inplace=true)

#轉換laogong = laogong_df.segment.values.tolist()

laopo = laopo_df.segment.values.tolist()

erzi = erzi_df.segment.values.tolist()

nver = nver_df.segment.values.tolist()

#定義分詞和打標籤函式preprocess_text

#引數content_lines即為上面轉換的list

#引數sentences是定義的空list,用來儲存打標籤之後的資料

#引數category 是型別標籤

def preprocess_text(content_lines, sentences, category):

for line in content_lines:

try:

segs=jieba.lcut(line)

segs = [v for v in segs if not str(v).isdigit()]#去數字

segs = list(filter(lambda x:x.strip(), segs)) #去左右空格

segs = list(filter(lambda x:len(x)>1, segs)) #長度為1的字元

segs = list(filter(lambda x:x not in stopwords, segs)) #去掉停用詞

except exception:

print(line)

continue

#呼叫函式、生成訓練資料

sentences =

preprocess_text(laogong, sentences, 'laogong')

preprocess_text(laopo, sentences, 'laopo')

preprocess_text(erzi, sentences, 'erzi')

preprocess_text(nver, sentences, 'nver')

#用sk-learn對資料切分,分成訓練集和測試集

from sklearn.model_selection import train_test_split

x, y = zip(*sentences)

x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1234)

#抽取特徵,我們對文字抽取詞袋模型特徵

from sklearn.feature_extraction.text import countvectorizer

vec = countvectorizer(

analyzer='word', # tokenise by character ngrams

max_features=4000, # keep the most common 1000 ngrams

)vec.fit(x_train)

from sklearn.*****_bayes import multinomialnb

classifier = multinomialnb()

classifier.fit(vec.transform(x_train), y_train)

#對結果進行評分

print(classifier.score(vec.transform(x_test), y_test))

#0.9928400954653938

from sklearn.svm import svc

svm = svc(kernel='linear')

svm.fit(vec.transform(x_train), y_train)

print(svm.score(vec.transform(x_test), y_test))

#0.9952267303102625

文字分類 機器學習方法

文字分類實現步驟 定義階段 定義資料以及分類體系,具體分為哪些類別,需要哪些資料 資料預處理 對文件做分詞 去停用詞等準備工作 資料提取特徵 對文件矩陣進行降維 提取訓練集中最有用的特徵 模型訓練階段 選擇具體的分類模型以及演算法,訓練出文字分類器 評測階段 在測試集上測試並評價分類器的效能 應用階...

機器學習1 KNN文字分類

思想 1.找到與資料最相近k個資料 根據余弦相似度 2.分別找出k條資料的類別,同類別相加,得到最大值,則該類別為測試資料的所屬類。encoding utf 8 from pylab import reload sys defcreatedataset group 1.0,1.1 2.0,2.1 1...

機器學習之多元分類(機器學習基石)

如上圖所示我們要使用一些線性模型來分割這四種不同的圖案,利用以前學過的二元分類我們可以將某乙個種類分別從整體中分離出來。比如將圖通是方塊和不是方塊的做二元分類,是三角形的和不是三角形的進行分類等等,然後我們得到下圖 如上圖所示我們在單獨的分割中可以分別將我們想要的目標圖案分割出來,但是我們將這些圖示...