最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

記一次二分類學習過程

2023-03-05 00:26 作者:暗冥_紫  | 我要投稿

(jupyter notebook中運行, 小數精確度為6位)

先是導入

import pandas as pd

from matplotlib import pyplot as plt

import jieba


讀取備好的csv數據

data = pd.read_csv('data-out.csv')

data.head()? # 看一眼數據的頭5行有個底

數據頭5行

type(data)? #?<class 'pandas.core.frame.DataFrame'>?

type(data['stars'])? #?<class 'pandas.core.series.Series'> 一列數據


def zhuanhuan(score):? # 對打分程度stars進行二分類

????if score > 3:

? ? ? ? return 1

? ? elif score < 3:

? ? ? ? return 0

? ? else:

? ? ? ? return None


data['target'] = data['stars'].map(lambda x : zhuanhuan(x))? # 對data新添加一列數據


新的data


data_model = data.dropna()? # 去掉None數據那一行


from sklearn.model_selection import train_test_split? # 準備切分測試集、訓練集

x_train, x_test, y_train, y_test = train_test_split(data_model['cus_comment'], data_model['target'], random_state=3, test_size=0.25)? # 使用函數切分數據集


x_train

y_train

st = open('stopwords.txt',encoding='utf-8')? # 導入我的停止詞數據

stl = [i.strip() for i in st.readlines()]? # 轉換為列表


def fenci(train_data):? # 定義一個中文分詞函數?

? ? words_df = train_data.apply(lambda x:' '.join(jieba.cut(x)))

? ? return words_df


# 使用TF-IDF進行文本轉向量處理

from sklearn.feature_extraction.text import TfidfVectorizer

tv = TfidfVectorizer(stop_words=stl, max_features=5000, ngram_range=(1,2))

tv.fit(x_train)


# 計算分類效果的準確率

from sklearn.naive_bayes import MultinomialNB? # 采用樸素貝葉斯方法

classifier = MultinomialNB()

classifier.fit(tv.transform(x_train), y_train)? # 訓練模型

#? tv.transform()方法將文本轉為向量,這樣才能丟進訓練

classifier.score(tv.transform(x_test), y_test)


def ceshi(model,strings):? # 定義

? ? strings_fenci = fenci(pd.Series([strings]))

? ? return float(model.predict_proba(tv.transform(strings_fenci))[:,1])

????#?MultinomialNB.predict_proba()? 得到預測為0的概率和預測為1的概率[(px1,px2),()]


test1 = '還會再來,非常喜歡'

test2 = '我不會來的。'

print(ceshi(classifier, test2))? #?0.9188640973630832

#?model.predict_proba(tv.transform(strings_fenci)值:[[0.0811359 0.9188641]]


from sklearn.metrics import confusion_matrix? # 引入混淆矩陣

y_predict = classifier.predict(tv.transform(x_test))? # 生成y預測label值

cm = confusion_matrix(y_test, y_predict)? # 根據y的真實與預測值生成混淆矩陣

cm? #?array([[0, 2],? [1, 1]], dtype=int64)

# 混淆矩陣格式

TN|FP

FN|TP


from sklearn.metrics import roc_auc_score? # 引入計算ROC曲線下的AUC面積

roc_auc_score(y_test,y_predict)? #?0.5598121490959593?不是很理想


index_tmp = y_train==0? # 取出label值等于0的index值,輸出bool類型的?<class 'pandas.core.series.Series'>值

y_tmp = y_train[index_tmp]

x_tmp = x_train[index_tmp]? # 存儲label值為0的series

x_train2 = pd.concat([x_train,x_tmp,x_tmp,x_tmp,x_tmp,x_tmp,x_tmp,x_tmp,x_tmp,x_tmp,x_tmp])

#?pd.concat() 列連接series

y_train2 = pd.concat([y_train,y_tmp,y_tmp,y_tmp,y_tmp,y_tmp,y_tmp,y_tmp,y_tmp,y_tmp,y_tmp])

# 以上一段操作將訓練集擴大10倍,其中9成數據的label值為0


clf2 = MultinomialNB()? # 重新實例一個樸素貝葉斯分析類

clf2.fit(tv.transform(x_train2), y_train2)

y_pred2 = clf2.predict_proba(tv.transform(x_test))[:,1]

roc_auc_score(y_test,y_pred2)? #?0.9086147696182646,提高許多


y_predict2 = clf2.predict(tv.transform(x_test))

cm = confusion_matrix(y_test, y_predict2)

cm? #?array([[ 345, ?114],? [ 518, 4447]], dtype=int64)


# 測試

ceshi(clf2,'排隊人太多,環(huán)境不好,口味一般')? #?0.5387091784756946


'好極了'?#?0.8150003099198344

'不好吃,下次不來了'? # 0.4197673887014011

'偶遇的很驚喜的店人非常多需要拼桌里很熱可能老廣州的店都這樣重在味道好強推雙皮奶和姜撞奶奶味超級足'? #?0.968618881251999

'這家店真不想再來一次一開始以為很好吃沒想到就這樣的味道真的無法接受跟你們說一下千萬別來誰來誰傻'? #?0.12606395529300188

'這家店真不想再來一次一開始以為很好吃沒想到就這樣的難吃但說實話味道也不會太難吃但還是好吃所以我推薦這間店真的不錯很好吃‘? #?0.23276097174516988

'這家店真想再來一次一開始以為很好吃沒想到就這樣的美味但說實話味道也不會太難吃但還是好吃所以我推薦這間店真的不錯很好吃'? #?0.7300467477143802

‘這破店真沒人會來吃’? #?0.5072788353863383

'這破店真每人會來吃'? #?0.8116153650177526

'難吃死掉'?#?0.025473639249854133


總結:
模型比較簡潔,效果一般,對于文本的分析不是很到位,沒有很好理清邏輯關系,但對于入門訓練而言挺有幫助。


記一次二分類學習過程的評論 (共 條)

分享到微博請遵守國家法律
隆德县| 墨玉县| 图木舒克市| 刚察县| 桦川县| 五常市| 临高县| 成安县| 西青区| 麦盖提县| 当涂县| 垣曲县| 大化| 资兴市| 东莞市| 夹江县| 沭阳县| 石河子市| 杨浦区| 敦煌市| 武城县| 遂川县| 娱乐| 桑植县| 十堰市| 新密市| 青田县| 高台县| 福清市| 格尔木市| 时尚| 偃师市| 衡东县| 庐江县| 鸡西市| 鹤峰县| 怀安县| 齐齐哈尔市| 金门县| 浮山县| 阜南县|