机器学习-决策树
1.决策树
1.优缺点
优点:通俗的说,决策树模型很容易使用,不需要使用者很详细的了解背后的过程等就能得出很好的模型
缺点:对连续性的字段比较难预测、对有时间顺序的数据,需要很多预处理的工作、当类别太多时,错误可能就会增加的比较快
2.应用(读取要分析的数据)
逐行读取:这里随便选取了一个数据,随便找的,不必在意后面模型的准确性
1 import numpy as np 2 import sklearn.preprocessing as sp 3 import sklearn.ensemble as se 4 import sklearn.model_selection as ms 5 6 7 data = [] 8 with open('car.txt','r') as f: 9 for line in f.readlines(): 10 data.append(line[:-1].split(','))
以上是要用的库,和数据的读取并转置数据、进行编码,对data数据进行划分,最后一行为训练集映射,前几行数据为训练集,这里很好理解
data = np.array(data).T encoders, train_x = [], [] for row in range(len(data)): encoder = sp.LabelEncoder() encoder.fit_transform(data[row]) if row < len(data) - 1: train_x.append(encoder.fit_transform(data[row])) else: train_y = encoder.fit_transform(data[row]) encoders.append(encoder)
对模型训练后的结果评测,看模型准确率多少,里面的
max_depth:最大树高
n_estimators :多少颗
random_state: 随机种子源(我比较习惯5和7)
这里用的是f1得分(召回率、查准率)
注意里面的交叉验证cv值不是越高越好(值越大,测试的样本数越少,过少会警告)
train_x = np.array(train_x).T model = se.RandomForestClassifier(max_depth=9,n_estimators=140,random_state=7) print(ms.cross_val_score(model, train_x, train_y, cv=5,scoring='f1_weighted').mean()) model.fit(train_x,train_y)
以上是训练数据的准备
下面准备测试数据
data = [],根据需求数据整理就行
测试的数据记得转置:
data = np.array(data).T
test_x = [] for row in range(len(data)): encoder = encoders[row] if row < len(data) - 1: test_x.append(encoder.transform(data[row])) else: test_y = encoder.transform(data[row]) test_x = np.array(test_x).T pred_test_y = model.predict(test_x) print(encoders[-1].inverse_transform(pred_test_y))
直接把测试数据扔进去进行测试就会得出相应预测结果
未完待续

浙公网安备 33010602011771号