机器学习————Sklearn学习

一.决策树

机器学习————Sklearn学习_第1张图片

1.分类树

1.1

#引入库
from sklearn import tree
#导入一个数据集的类(这里是著名的红九数据集),datasets是库
from sklearn.datasets import load_wine
#从模型选择中分别导入测试集和训练集的类
from sklearn.model_selection import train_test_split
#将数据实例化
wine = load_wine()
#查看
print(wine)
#是字典采用点加‘键’的形式查看数据
print(wine.data)
print(wine.target)
#使用.shape查看数据结构
print(wine.data.shape)
(输出结果为(178, 13)#若想看他生成表,可进行如下操作
import pandas as pd
print(pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis = 1))
#查看特征名使用.feature_names
print(wine.feature_names)
#查看标签名.target_names
print(wine.target_names)
#test_size=0.3表示30%训练集,表示70%测试集,注意是xxyy
Xtrain,Xtest,Ytrain,Ytest =train_test_split(wine.data,wine.target,test_size=0.3)
#实例化,random_state是设置随机度的,spitter也是
clf = tree.DecisionTreeRegressor(criterion="entropy",random_state=30)
clf = clf.fit(Xtrain,Ytrain)
#.score是返回预测的准确度
score = clf.score(Xtest,Ytest)
import graphviz

dot_data = tree.export_graphviz(clf
,feature_names=feature_names
,filled = True#填充颜色,颜色越深,不纯度越低
,rounded = True#框的形状,变圆了)
#查看特征重要性
clf.fature_importances_

加载wine数据集用load—wine

1.2几个参数的作用

  • max_depth限制树的最大升读,超过限定深度的树枝全部剪掉(就是只有几层的意思)
  • min_samples_leaf(最后一层)&min_samples_spilt限制叶子节点
  • max_features&min_impurity_decrease一般max_depth使用,用作树的”精修“
  • class_weight&min_weight_fraction_leaf完成样本标签平衡的参数此模式自动给与数据集中的所有标签相同的权重

1.3重要的属性及接口

接口:比如刚刚的fit ,score

apply predict
返回每个测试样本所在的叶子节点的索引 返回每个测试样本的分类或者回归结果

2.回归树

几乎所有参数,属性接口都和分类树一样,但是在回归树中没有标签分布是否均衡的问题、
在回归树中,mse不只是我们的分支质量衡量指标
机器学习————Sklearn学习_第2张图片
交叉验证使用cross_val_score()
均方误差:MSE的本质是样本真是数据与回归结果的差异(相当于分类树中的准确度)
回归树的接口score返回的是R平方,并不是MSE
机器学习————Sklearn学习_第3张图片
交叉验证:观察模型

#调用数据集中的波士顿数据集
from sklearn.datasets import load_boston
#调用cross_val_score进行交叉验证
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeRegressor
boston = load_boston()
regressor = DecisionTreeRegressor(random_state=0)
#第一个参数是实例化好的模型,第二个参数是完整的数据,第三个是完整的标签,第四个是表示交叉验证要进行十次(cv的默认值是5),加上第五个参数显示的是负的均方误差,不写的话返回的是R^2^
cross_val_score(regressor, boston.data, boston.target, cv=10,scoring = "neg_mean_squared_error)

2.1使用ravel()降维

import numpy as np
print(np.random.random((2,1)))
print(np.random.random((2,1)).ravel())

输出结果为

[[0.74494245]
 [0.48934025]]
[0.13099806 0.30888023]

显然random中(2,1)表示两行一列

2.2制造噪点(模拟现实)

rand的范围在(0,1),0.5-rng.rand(16)的范围就在(-0.5,0.5)

y[::5] += 3*(0.5-rng.rand(16))

未完待续~

你可能感兴趣的:(sklearn,学习)