創建模型經過長文本數據正文(article),預測文本對應的類別(class)python
注 : 報名參賽或加入隊伍後,可獲取數據下載權限。ios
數據包含 2 個 csv 文件:算法
train_set.csv:此數據集用於訓練模型,每一行對應一篇文章。 文章分別在「字」和「詞」的級別上作了脫敏處理。 共有四列:機器學習
注:每個數字對應一個「字」,或「詞」,或「標點符號」。「字」的編號與「詞」的編號是獨立的!函數
test_set.csv:此數據用於測試。 數據格式同 train_set.csv
,但不包含 class
。性能
注:test_set與train_test中文章id的編號是獨立的。 友情提示:請不要嘗試用excel打開這些文件!因爲一篇文章太長,excel可能沒法完整地讀入某一行!學習
binary-classification測試
採用各個品類F1指標的算術平均值,它是 Precision
和 Recall
的調和平均數。spa
其中,Pi
是表示第 i
個種類對應的 Precision
, Ri
是表示第 i
個種類對應 Recall
。 AB
榜的劃分方式和比例: 【1】評分採用AB榜形式,提交文件必須包含測試集中全部用戶的預測值。排行榜顯示A榜成績,競賽結束後2小時切換成B榜單。B榜成績以選定的兩次提交或者默認的最後兩次提交的最高分爲準,最終比賽成績以B榜單爲準。 【2】此題目的AB榜是隨機劃分,A榜數據佔50%,B榜使用全量測試集,即佔100%。.net
這裏提早假設: 已經有了一個學習的機器學習模型 f
,供你使用
注:函數輸出的類別是咱們事先人爲約定好,好比我讓數字4表明政治類, 數字3表明科技類,...
求一個數學函數(又可稱爲機器學習模型):
使模型預測能力更強
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" Created on Thu Jun 20 21:17:51 2019 @author: iosdevlog """
""" 導入所須要的軟件包 """
import pandas as pd
from sklearn.linear_model import LogisticRegression #導入線性迴歸庫
from sklearn.feature_extraction.text import CountVectorizer #導入特徵提取庫
print("開始")
""" @ 代碼功能簡介: 從硬盤上讀取已下載好的數據,並進行簡單處理 @ 知識點定位:數據預處理 """
#讀取文件,而且刪除無關東西
df_train = pd.read_csv("./train_set.csv")
df_test = pd.read_csv("./test_set.csv")
df_train.drop(columns =["article", "id"], inplace = True ) # 爲何要刪除這兩個列? id 列無心義,不須要用 article,可直接刪除
df_test.drop(columns =["article"], inplace = True )
""" @ 代碼功能簡介:將數據集中的字符文本轉換成數字向量,以便計算機可以進行處理 (一段數字 ---> 一個向量) @ 知識點定位:特徵工程 """
# 獲取特徵向量
vectorizer = CountVectorizer(ngram_range = (1,2), min_df = 3, max_df = 0.9, max_features = 100000) # 特徵提取
vectorizer.fit(df_train["word_seg"]) # 爲何要訓練這一列內容? 要先學習整個數據集的詞的 DF(文檔詞頻)
x_train = vectorizer.transform(df_train["word_seg"]) #特徵轉爲特徵向量
x_test = vectorizer.transform(df_test["word_seg"])
y_train = df_train["class"] - 1 # 這裏爲啥要給全部的類別都減去 1? 減 1 是代碼習慣問題,讓 class 從 0 計數
""" @ 代碼功能簡介:訓練一個分類器 @ 知識點定位:傳統堅督學習 之 線性邏輯迴歸模型 """
lg = LogisticRegression(C = 4, dual = True) # 邏輯迴歸初始化
lg.fit(x_train, y_train) # 進行訓練,模型保存在 lg 裏面
""" 根據上面訓練好的分類器對測試集的每一個樣本進行預測 """
y_test = lg.predict(x_test) # 用模型進行測試
""" 將測試集的預測結果保存至本地 """
# 根據上面訓練好的分類器對測試集的每一個樣本進行預測
df_test["class"] = y_test.tolist() # 測試結果轉爲列表,而且放入測試文檔的類別裏面。問題5:測試文檔沒有類別這個列。這行代碼會自動給測試文檔添加一個類別列。
df_test["class"] = df_test["class"] + 1 # 爲何又要給全部類別分別加 1
df_result = df_test.loc[:, ["id", "class"]] # 從測試集裏面拿到 ["id", "class"] 列的內容
df_result.to_csv("./result.csv", index = False) #測試結果轉爲提交的CSV格式
print("結束")
複製代碼
「達觀杯」文本智能處理挑戰賽_賽體與數據 Kaggle: Starter:「達觀杯」文本分類挑戰賽新手入門代碼 深度之眼