Skip to content

Commit e6f299e

Browse files
author
xuming06
committed
add xgboost. xuming 20180125
1 parent a12a00b commit e6f299e

8 files changed

Lines changed: 169 additions & 7 deletions

File tree

11scikit-learn/basic-tutorial.ipynb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
},
1111
{
1212
"cell_type": "code",
13-
"execution_count": 95,
13+
"execution_count": 1,
1414
"metadata": {
1515
"collapsed": false
1616
},
@@ -33,7 +33,7 @@
3333
},
3434
{
3535
"cell_type": "code",
36-
"execution_count": 96,
36+
"execution_count": 2,
3737
"metadata": {},
3838
"outputs": [
3939
{
@@ -42,7 +42,7 @@
4242
"array([0, 1, 2, ..., 8, 9, 8])"
4343
]
4444
},
45-
"execution_count": 95,
45+
"execution_count": 2,
4646
"metadata": {},
4747
"output_type": "execute_result"
4848
}
@@ -53,7 +53,7 @@
5353
},
5454
{
5555
"cell_type": "code",
56-
"execution_count": 97,
56+
"execution_count": 3,
5757
"metadata": {},
5858
"outputs": [
5959
{
@@ -62,7 +62,7 @@
6262
"array([[ 0., 0., 5., 13., 9., 1., 0., 0.],\n [ 0., 0., 13., 15., 10., 15., 5., 0.],\n [ 0., 3., 15., 2., 0., 11., 8., 0.],\n [ 0., 4., 12., 0., 0., 8., 8., 0.],\n [ 0., 5., 8., 0., 0., 9., 8., 0.],\n [ 0., 4., 11., 0., 1., 12., 7., 0.],\n [ 0., 2., 14., 5., 10., 12., 0., 0.],\n [ 0., 0., 6., 13., 10., 0., 0., 0.]])"
6363
]
6464
},
65-
"execution_count": 96,
65+
"execution_count": 3,
6666
"metadata": {},
6767
"output_type": "execute_result"
6868
}
@@ -81,7 +81,7 @@
8181
},
8282
{
8383
"cell_type": "code",
84-
"execution_count": 98,
84+
"execution_count": 4,
8585
"metadata": {},
8686
"outputs": [
8787
{
@@ -90,7 +90,7 @@
9090
"SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0,\n decision_function_shape=None, degree=3, gamma=0.001, kernel='rbf',\n max_iter=-1, probability=False, random_state=None, shrinking=True,\n tol=0.001, verbose=False)"
9191
]
9292
},
93-
"execution_count": 97,
93+
"execution_count": 4,
9494
"metadata": {},
9595
"output_type": "execute_result"
9696
}

19xgboost/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# -*- coding: utf-8 -*-
2+
# Author: XuMing <[email protected]>
3+
# Data: 18/1/25
4+
# Brief:

19xgboost/data/test.data.sample

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
办理 你好 很 高兴 为 您 服务 啊 你好 问 一下 我 手机 上 还有 多少 流 流量 能 查 出来 吗 哦 您 最近 有 没 有 这个 流量 提醒 呢 呃 我 手机 刚才 呃 我 问 过 了 然后 问 了 发 了 一个 短信 它 说 我 用 了 三百三十 多兆 然后 我 想 问 一下 是 我 手机 上 总共 能 用 多少 兆 哦 您 现在 的 话 套餐 里面 总共 是 包含 的 有 四百五十兆 的 呃 是 三百兆 国内 的 三百兆 国内 的 对 的 是 三百兆 流量 哦 那 我 都 超 了 是 吧 哦 对了 那 这个 的 话 应该 是 已经 没有 流量 了 哦 那 你 能 不 能 帮 我 先 开 一个 流量包 呀 开 一个 十块 钱 的 就 够 了 哦 可以 的 现在 是 有 个 十元 加油包 是 包 国内 流量 一百兆 限 本月 使用 月底 自动 取消 您 看 可以 吗 哦 可以 可以 十块 钱 是 吧 哦 对 的 好 的 那 请 您 按 一下 你好 我 现在 如果 开通 的话 立即 就 能 用 是 吧 哦 是的 哦 好吧 好 吧 你 先 帮 我 开通 吧 好 吗 嗯行 请 您 按 一下 一号 键 帮 您 办理 请 不要 挂机 嗯 好 的 十元 上网 加油包 是 包 国内 流量 一百兆 开通 之后 立即 生效 到 月底 自动 取消 一次性 扣费 已经 帮 您 办理 成功 哦 你 这个 是 一下子 十元 就 扣 了 吗 啊 是的 嗯 好好 那 谢 啊 不 客气 还有 其他 可以 帮 您 的 吗 啊 没有 了 谢谢 那 祝 您 生活 愉快 再见 嗯

19xgboost/data/train.data.sample

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
办理 不 带 了 您好 很 高兴 为 您 服务 喂 你好 诶 麻烦 你 我 想 充 十块 钱 的 那个 国内 流量 十块 钱 能 充 多少 啊 十块 钱 它 那个 是 加油包 里面 是 一百兆 的 啊 那 行 那 麻烦 你 帮 我 办理 一下 吧 嗯 好 的 稍候 我 帮 您 转接 语音 您 按 一下 一 确认 啊 您好 先生 请 稍 等 它 这个 费用 会 一次性 收 到 月底 就 自动 取消 了 可以 吧 那 可以 但是 这个 流量 的话 下 个 月 可以 使用 吗 如果 用 不 完 的 话 啊 就 用不了 了 它 这 流量 的话 有效期 是 到 这 月底 哦 那 好 的 好 的 我 这 现在 已经 已经 买 过 了 吧 都 买 吧 对 可以 正常 用 了 嗯 那 好 的 好 的 谢谢 啊 呃 不 客气 另外 建议 稍候 您 在 您 的 手机 的 微信 上面 可以 关注 一下 移动 的 官微 我 给 您 发送 一个 关注 绑定 的 方式 方便 您 以后 在 外地 查询 话费 跟 流量 好 吧 行行 好 的 好 的 谢谢 啊 哎 不 客气 先生 其他 还 需要 帮助 吗 嗯 好 的 不 需要 了 谢谢 啊 不 客气 祝 您 生活 愉快 再见

19xgboost/feature.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# -*- coding: utf-8 -*-
2+
# Author: XuMing <[email protected]>
3+
# Data: 18/1/25
4+
# Brief:
5+
import sys
6+
from sklearn.feature_selection import SelectKBest, chi2
7+
from sklearn.feature_extraction.text import TfidfVectorizer
8+
import pickle
9+
10+
11+
class Feature(object):
12+
"""
13+
select features from the raw text
14+
"""
15+
16+
def __init__(self, feature_vec_name, best_feature_name):
17+
self.feature_vec_name = feature_vec_name
18+
self.best_feature_name = best_feature_name
19+
self.init = False
20+
21+
def fit_model(self, train_x, train_y):
22+
best_k = self.max_feature_cnt
23+
vec_max_df = self.feature_max_df
24+
vec_min_df = self.feature_min_df
25+
vec_ngram_range = self.ngram_range
26+
self.tf_vec = TfidfVectorizer(ngram_range=vec_ngram_range,
27+
min_df=vec_min_df, max_df=vec_max_df)
28+
self.best = SelectKBest(chi2, k=best_k)
29+
train_tf_vec = self.tf_vec.fit_transform(train_x)
30+
31+
def set_feature_para(self, max_feature_cnt, feature_max_df,
32+
feature_min_df, ngram_range):
33+
self.max_feature_cnt = max_feature_cnt
34+
self.feature_max_df = feature_max_df
35+
self.feature_min_df = feature_min_df
36+
self.ngram_range = ngram_range
37+
38+
def fit(self, max_feature_cnt, feature_max_df,
39+
feature_min_df, ngram_range, train_x, train_y):
40+
self.set_feature_para(max_feature_cnt, feature_max_df,
41+
feature_min_df, ngram_range)
42+
self.fit_model(train_x, train_y)
43+
44+
pickle.dump(self.tf_vec, self.feature_vec_name, True)
45+
pickle.dump(self.best, self.best_feature_name, True)
46+
47+
def load_model(self):
48+
self.tf_vec = pickle.load(self.feature_vec_name)
49+
self.best = pickle.load(self.best_feature_name)
50+
self.init = True
51+
52+
def transform(self, x_test):
53+
if not self.init:
54+
self.load_model()
55+
x_vec = self.tf_vec.transform(x_test)
56+
x_best = self.best.transform(x_vec)
57+
return x_best

19xgboost/lr.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# -*- coding: utf-8 -*-
2+
# Author: XuMing <[email protected]>
3+
# Data: 18/1/25
4+
# Brief:
5+
import pickle
6+
from sklearn.linear_model import LogisticRegression as LR
7+
8+
9+
class LR(object):
10+
"""
11+
LR model for text classification
12+
"""
13+
14+
def __init__(self, lr_name):
15+
self.lr_name = lr_name
16+
self.init = False
17+
18+
def train_model(self, train_x, train_y):
19+
self.clf = LR()
20+
self.clf.fit(train_x, train_y)
21+
self.init = True
22+
pickle.dump(self.clf, self.lr_name, True)
23+
24+
def load_model(self):
25+
self.clf = pickle.load(self.lr_name)
26+
self.init = True
27+
28+
def test_model(self, test_x, test_y):
29+
if not self.init:
30+
self.load_model()
31+
32+
pred_y = self.clr.predict(test_x)
33+
total = len(test_y)
34+
correct = 0
35+
for idx in range(total):
36+
if pred_y[idx] == test_y[idx]:
37+
correct += 1
38+
print('Test LR:', total, correct, correct * 1.0 / total)

19xgboost/test.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# -*- coding: utf-8 -*-
2+
# Author: XuMing <[email protected]>
3+
# Data: 18/1/25
4+
# Brief:
5+
import unittest
6+
from util import load_load
7+
from feature import Feature
8+
9+
train_file = "./data/train.data.sample"
10+
test_file = "../data/train.data.sample"
11+
12+
13+
class ClassificationTest(unittest.TestCase):
14+
"""Test Case for classification
15+
"""
16+
17+
@classmethod
18+
def setUpClass(cls):
19+
pass
20+
21+
@classmethod
22+
def tearDownClass(cls):
23+
pass
24+
25+
def test_init(self):
26+
print("test_init")
27+
"""测试初始化函数,捕捉异常"""
28+
data_x, data_y = load_load(train_file)
29+
self.assertEqual(len(data_x) > 0, True)
30+
31+
32+
if __name__ == '__main__':
33+
unittest.main()

19xgboost/util.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# -*- coding: utf-8 -*-
2+
# Author: XuMing <[email protected]>
3+
# Data: 18/1/25
4+
# Brief:
5+
import sys
6+
7+
8+
def load_load(data_path):
9+
"""
10+
load data by segmented corpus
11+
:param data_path:
12+
:return:
13+
"""
14+
data_x = []
15+
data_y = []
16+
with open(data_path, encoding='utf-8') as f:
17+
for line in f:
18+
parts = line.strip().split('\t')
19+
if len(parts) != 2:
20+
print('err, must be 2 parts.')
21+
continue
22+
data = ' '.join(parts[1:])
23+
tag = parts[0].strip()
24+
if tag == '':
25+
continue
26+
data_x.append(data)
27+
data_y.append(tag)
28+
return data_x, data_y

0 commit comments

Comments
 (0)