1. 程式人生 > >“達觀杯”文字智慧處理挑戰賽程式碼示例

“達觀杯”文字智慧處理挑戰賽程式碼示例

達觀杯介紹:

類似kaggle的資料科學比賽,任何人可以參加

網址:http://www.dcjingsai.com/

可以用支付寶實名註冊

 

專案名稱:

“達觀杯”文字智慧處理挑戰賽

安裝Python,執行如下程式碼。可以得到一個分數

 

專案程式碼:

'''
作者:公眾號:灣區人工智慧
場景:達觀杯 文字智慧競賽  http://www.pkbigdata.com/common/cmpt/%E2%80%9C%E8%BE%BE%E8%A7%82%E6%9D%AF%E2%80%9D%E6%96%87%E6%9C%AC%E6%99%BA%E8%83%BD%E5%A4%84%E7%90%86%E6%8C%91%E6%88%98%E8%B5%9B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html
時間:#2018-12-01 563610 December Saturday the 48 week, the 335 day SZ

'''

print('start')
import pandas as pd 
from sklearn.linear_model import LogisticRegression #匯入線性迴歸庫
from sklearn.feature_extraction.text import CountVectorizer #匯入特徵提取庫

#讀取檔案,並且刪除無關東西
df_train = pd.read_csv('/Users/apple/Documents/ST/python/competition/DataCastel/text_intelligence/new_data/train_set.csv')
df_test = pd.read_csv('/Users/apple/Documents/ST/python/competition/DataCastel/text_intelligence/new_data/test_set.csv')
df_train.drop(columns =['article', 'id'], inplace = True ) #問題1: 為什麼要刪除這兩個列,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']) #問題2:為啥要訓練這一列內容,要先學習整個資料集的詞的DF(文件詞頻)
x_train = vectorizer.transform(df_train['word_seg']) #特徵轉為特徵向量
x_test = vectorizer.transform(df_test['word_seg'])
y_train = df_train['class'] - 1  #問題3:這裡為啥要給所有的類別都減去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  #問題4:為啥又要給所有類別分別加1
df_result = df_test.loc[:, ['id', 'class']]  #從測試集裡面拿到'id', 'class']]列的內容
df_result.to_csv('/Users/apple/Documents/ST/python/competition/DataCastel/text_intelligence/new_data/result.csv', index = False) #測試結果轉為提交的CSV格式

print('end')





'''
train_set.csv 1.5G, 普通電腦開啟很吃力,隨意閱讀也吃力,謹慎開啟;
第一行有:ID,article, Word_seg, class;
id:文章數量編號102277個文字; article:文章內容,是一些數字; Word_seg:也是一些數字; class:文字對應的類別從1到20

test_set.csv 1.38Gb,
第一行有:ID,article, Word_sequence,內容和訓練集一樣,只是沒有了類別標籤

result.csv 865 KB, 
第一行有ID, class;也就是預測每一個文件的類別

提交說明

1) 以csv格式提交,編碼為UTF-8,第一行為表頭; 
2) 內含兩列,一列為id,另一列為class; 
3) id對應測試集中樣本的id,class為參賽者的模型預測的文字標籤。


y_train = df_train['class'] - 1 內容:
  import imp
0         13
1          2
2         11
3         12
4         11
5         12
102274    11
102275     3
102276    10
Name: class, Length: 102277, dtype: int64
[Finished in 25.6s]


y_train = df_train['class']內容:
  import imp
0         14
1          3
2         12
102274    12
102275     4
102276    11
Name: class, Length: 102277, dtype: int64
[Finished in 24.3s]

區別就是給每個類的型別都減去1;
'''

'''
得分:0.73

拿高分的方法:
資料預處理:這裡的資料比較完整,不用擔心

特徵工程
這裡技巧很足,需要不斷的積累

機器學習演算法
不同演算法都有對應的任務型別。
lightboard微軟開發的工具,適合大部分的情況,屬於西瓜書第八章的內容。

資料增強:
給了1萬條資料,變成10萬條資料。



輸出內容:
start
/usr/local/lib/python3.7/site-packages/sklearn/externals/joblib/externals/cloudpickle/cloudpickle.py:47: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp
/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.
  FutureWarning)
/usr/local/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:459: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.
  "this warning.", FutureWarning)
/usr/local/lib/python3.7/site-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  "the number of iterations.", ConvergenceWarning)
end
[Finished in 1315.7s]

'''