sklearn-回归树+决策树实例(泰坦尼克号数据集)

回归树

#交叉验证:用来观察模型稳定性的一种方法
# 我们将数据划分为n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确度。
from sklearn.datasets import load_boston#波士顿房价数据——连续性数据
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeRegressor
# boston=load_boston
# regressor=DecisionTreeRegressor(random_state=0)#实例化
# print(cross_val_score(regressor, boston.data, boston.target, cv=10, scoring="neg_mean_squared_error"))
#实例化好后的算法模型,不需要划分为训练集和测试集的数据集(完整数据),完整的数据标签,每次10份做测试集,剩下的做训练集
#回归:不填scoring,默认返回R²——越大越好,范围:0-1,均方误差(负值因为看作损失)——越小越好


#回归树案例——拟合正弦曲线
import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt

#创建一条含有噪声的正弦曲线
rng=np.random.RandomState(1)#np.random随机数种子
x=np.sort(5*rng.rand(80,1),axis=0)#rng.rand(数组结构)——80行1列——0-1之间。np.sort排序
y=np.sin(x).ravel()#np.sin(x):80行1列  ravel降维              生成y
y[::5]+=3*(0.5-rng.rand(16))#步长:所有的行,列,每5个取一个;rng.rand(16):0-1        加上噪声
# plt.figure()
# plt.scatter(x,y,s=20,edgecolors="black",c="darkorange",label="data")
# plt.show()

#实例化
regr_1=DecisionTreeRegressor(max_depth=2)
regr_2=DecisionTreeRegressor(max_depth=5)
regr_1.fit(x,y)
regr_2.fit(x,y)

#测试集导入模型,预测结果
x_test=np.arange(0.0,5.0,0.01)[:,np.newaxis]#np.arange(开始点,结束点,步长)
# np.newaxis 增维例子
# l=np.array([1,2,3,4])
# print(l.shape)
# print(l[:, np.newaxis])——4行1列
# print(l[np.newaxis,:])-1行4列
y_1=regr_1.predict(x_test)
y_2=regr_2.predict(x_test)

#绘制图像
plt.figure()
plt.scatter(x,y,s=20,edgecolors="black",c="darkorange",label="data")
plt.plot(x_test,y_1,color="cornflowerblue",label="max_depth=2",linewidth=2)
plt.plot(x_test,y_2,color="yellowgreen",label="max_depth=5",linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

```python
决策树实例
# Imports
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
#导入数据集
data=pd.read_csv(r"train.csv")
# print(data)
# data.head()
# data.info()

#筛选特征——将对于是否营救无关的特征删除
data.drop(['Cabin','Name','Ticket'],inplace=True,axis=1)

#处理缺失值——用平均值补充缺失的年龄
data['Age']=data['Age'].fillna(data['Age'].mean())
# print(data.info())

#只要有缺失值的行,就删除
data=data.dropna()

#舱门
print(data['Embarked'].unique().tolist())#----['S', 'C', 'Q']
labels=data['Embarked'].unique().tolist()
data['Embarked']=data['Embarked'].apply(lambda x:labels.index(x))#'s'--->0--->labels.index('s')
#性别
data['Sex']=(data['Sex']=='male').astype('int')
# print(data.head())

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])#索引变成0-621之间
for i in xtrain,xtest,Ytrain,Ytest:
    i.index=range(i.shape[0])

#模型
clf=DecisionTreeClassifier(random_state=25)
clf=clf.fit(xtrain,Ytrain)
score=clf.score(xtest,Ytest)

clf=DecisionTreeClassifier(random_state=25)
score1=cross_val_score(clf,xtest,Ytest,cv=10).mean()#交叉验证
# print(score1)

train=[]
test=[]
for i in range(10):
    clf=DecisionTreeClassifier(random_state=25
                               ,max_depth=i+1
                               ,criterion="entropy"
                               )
    clf=clf.fit(xtrain,Ytrain)
    score_train=clf.score(xtrain,Ytrain)
    score_test=cross_val_score(clf,xtest,Ytest,cv=10).mean()
    train.append(score_train)
    test.append(score_test)
print(max(test))
plt.plot(range(1,11),train,color="red",label="train")
plt.plot(range(1,11),test,color="blue",label="test")
plt.xticks(range(1,11))#调整刻度
plt.legend()
plt.show()

#网格搜索 能够同时搜索多个参数的技术  枚举技术
#一串参数和这些参数对应的,我们希望网格搜索来搜索的参数的取值范围
#min_impurity_decrease信息增益
import numpy as np
gini_threholds=np.linspace(0,0.5,50)#基尼系数
# entropy_threholds=np.linspace(0,1,50)
parameters={"criterion":("gini","entropy")
            ,"splitter":("best","random")
            ,"max_depth":[*range(1,10)]
            ,"min_samples_leaf":[*range(1,50,5)]
            ,"min_impurity_decrease":[*np.linspace(0,0.5,50)]

}
clf=DecisionTreeClassifier(random_state=25)
GS=GridSearchCV(clf,parameters,cv=10)
GS=GS.fit(xtrain,Ytrain)
print(GS.best_params_)#从我们输入的参数和参数取值的列表中,返回最佳组合
print(GS.best_score_)#网格搜索后的模型的评价标准





泰坦尼克号数据集:私聊发送

你可能感兴趣的:(sklearn,回归树,决策树,机器学习,python)