“達觀杯”文字智慧處理挑戰賽程式碼示例
阿新 • • 發佈:2018-12-31
達觀杯介紹:
類似kaggle的資料科學比賽,任何人可以參加
可以用支付寶實名註冊
專案名稱:
“達觀杯”文字智慧處理挑戰賽
安裝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] '''