机器学习-决策树

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))

    直接把测试数据扔进去进行测试就会得出相应预测结果

    未完待续

posted @ 2020-05-07 12:21  例如  阅读(225)  评论(0)    收藏  举报