机器学习实战2-决策树算法( 四 )


处理数据类型
我们知道决策树是处理不了文字类型的所以遇到文字类型,我们需要处理这些文字类型的数据
()方法是对数据进行去重,我们就可以得到这个数据有多少种取值
data['Embarked'].unique()
data['Embarked'].unique().tolist()
这里()方法可以将array转化为list
data['Embarked'].apply(lambda x : labels.index(x))
labels.index("S")
只要我们()后的数据不超过10个我们都可以用这种方式来处理数据,前提是我们的数据之前没有联系就比如我们的S、Q、C中的数据没有任何关系
对于性别的处理我们仍然可以按照上述方式不过这里性别是二分类,我们可以另一种方式去处理
data.loc[:,"Sex"] = (data["Sex"] == "male").astype("int")
数据处理完之后我们就可接着回到了,中特征和标签是分开的,所以这里我们也需要将特征和标签分开
x = data.iloc[:, data.columns != "Survived"]
y = data.iloc[:, data.columns == "Survived"]
数据集的划分
Xtrain, Xtest, Ytrain, Ytest = train_test_split(x, y, test_size = 0.3)
我们可以看到由于我们的数据集是随机划分的,所以划分完之后的索引也变乱了,如果我们不是刻意需要保持索引的乱序,我们一般来说需要将索引调整为升序
Xtrain.index = range(Xtrain.shape[0])
for i in [Xtrain, Xtest, Ytrain, Ytest]:i.index = range(i.shape[0])
因为有四组数据我们可以直接用循环来处理
索引的处理是很重要的,我们只要在进行了某些随机操作,为了避免后续出错一般来说都需要将索引恢复到正常
至此我们将数据处理的所有工作完成,下面我们就可以开始跑模型了
模型的建立 实例化模型
clf = DecisionTreeClassifier(random_state=30)clf = clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest)score
交叉验证
from sklearn.model_selection import cross_val_scoreclf = DecisionTreeClassifier(random_state=25)# mean()是求均值的方法score = cross_val_score(clf, x, y, cv = 10).mean()score
我们可以看到这里平均得分相比于我们上面随机划分的数据集得分低,这说明我们随机划分的数据集比较好,接下来我们就需要通过调参来将模型的得分调高
调参
画超参数的曲线
import matplotlib.pyplot as plt te = []tr = []for i in range(10):clf = DecisionTreeClassifier(random_state = 25,max_depth = i + 1)clf = clf.fit(Xtrain, Ytrain)score_tr = clf.score(Xtrain, Ytrain)score_te = cross_val_score(clf, x, y, cv = 10).mean()tr.append(score_tr)te.append(score_te)print(max(te))plt.plot(range(1, 11), tr, color = "red", label = 'train')plt.plot(range(1, 11), te, color = 'blue', label = 'test')plt.xticks(range(1, 11))plt.legend()plt.show()
我们可以看到随着树的层数的加深,过拟合的程度越来越严重,我可以看到极值点在3这说明在 = 3的时候过拟合程度是最小的,所以我们就需要将固定在3然后i去调节其他参数