1. 程式人生 > >達觀杯_構建模型(一)linearSVM

達觀杯_構建模型(一)linearSVM

特徵:tfidf(word)+tfidf(article)

"""
1.特徵:tfidf(word)+tfidf(article)
2.模型:linearsvm
3.引數:C=5
"""

from sklearn.svm import LinearSVC # 支援向量機
from sklearn.calibration import CalibratedClassifierCV
import pandas as pd
import time
import pickle


time_start = time.time()
# 讀取特徵
with open('tfidf(word+article).pkl','rb') as f:
    x_train, y_train, x_test = pickle.load(f)
# 構建模型
clf = CalibratedClassifierCV(base_estimator=LinearSVC(C=5))
clf.fit(x_train, y_train)

# 儲存模型
with open('linearsvm(C=5)_tfidf(word+article).pkl','wb') as f:
    pickle.dump(clf,f)


# 預測結果:分類結果和概率結果
y_test = clf.predict(x_test)
y_test_proba = clf.predict_proba(x_test)


# 儲存模型輸出的分類檔案和概率檔案
y_test = [i+1 for i in y_test.tolist()]
y_test_proba = y_test_proba.tolist()

df_result = pd.DataFrame({'id':range(102277),'class':y_test})
df_proba = pd.DataFrame({'id':range(102277),'proba':y_test_proba})


df_result.to_csv('./ls(C=5)_tfidf(word+article).csv',index=False)
df_proba.to_csv('./ls(C=5)_tfidf(word+article)_proba.csv',index=False)

time_end = time.time()
print('共耗時:{:.2f}min'.format((time_end-time_start)/60))

特徵:linearsvm-tfidf(word)+lr-tfidf(article)

"""
1.特徵:linearsvm-tfidf(word)+lr-tfidf(article)
2.模型:linearsvm
3.引數:C=5
"""

from sklearn.svm import LinearSVC # 支援向量機
from sklearn.calibration import CalibratedClassifierCV
import pandas as pd
import time
import pickle


time_start = time.time()
# 讀取特徵
with open('linearsvm-tfidf(word)+lr-tfidf(article).pkl','rb') as f:
    x_train, y_train, x_test = pickle.load(f)
# 構建模型
clf = CalibratedClassifierCV(base_estimator=LinearSVC(C=5))
clf.fit(x_train, y_train)

# 儲存模型
with open('linearsvm(C=5)_tfidf(linearsvm_w+lr_a).pkl','wb') as f:
    pickle.dump(clf,f)
#或者用 joblib.dump(clf, "檔名.pkl") 儲存模型

# 預測結果:分類結果和概率結果
y_test = clf.predict(x_test)
y_test_proba = clf.predict_proba(x_test)


# 儲存模型輸出的分類檔案和概率檔案
y_test = [i+1 for i in y_test.tolist()]
y_test_proba = y_test_proba.tolist()

df_result = pd.DataFrame({'id':range(102277),'class':y_test})
df_proba = pd.DataFrame({'id':range(102277),'proba':y_test_proba})


df_result.to_csv('./ls(C=5)_tfidf(ls_w+lr_a).csv',index=False)
df_proba.to_csv('./ls(C=5)_tfidf(ls_w+lr_a)_proba.csv',index=False)

time_end = time.time()
print('共耗時:{:.2f}min'.format((time_end-time_start)/60))