机器学习建模的大概思路

说明:
  • 模型:决策树
  • 数据集:西瓜书2.0
  • 任务:用模型来区别好瓜和坏瓜(二分类)
"""导库"""
from sklearn import tree
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score as acc
from sklearn.model_selection import train_test_split as tts
import graphviz
import matplotlib.pyplot as plt
"""导数据集"""
data = pd.read_excel('watermelon.xlsx')
"""查看数据"""
data

在这里插入图片描述
可以看到,特征都是文字,也没有缺失值,模型不认识,需要转化成模型认识的特征。由于数据量小,可以直接查看,如果数据量大,很难发现缺失值,那么可以用data.info来查看数据的信息。

数据预处理

只做了ont-hot编码

"""特征间没有大小或者运算关系,直接做one-hot编码"""
dummy_df = pd.get_dummies(data.loc[:,data.columns[1:-1]])
data_dm = pd.concat([data,dummy_df],axis=1)
data_dm = data_dm.drop(data.columns[1:-1],axis=1)
data_dm

在这里插入图片描述

"""模型,其实可以理解为函数,每个x对应一个y"""
x = data_dm.iloc[:,2:]
y = data_dm.iloc[:,1]
# 查看一下x
x

在这里插入图片描述

# 查看一下y
y

在这里插入图片描述
可见,y还是文字,我们需要把它改成模型认识的数值。

# 对y进行0,1转化,1代表好瓜,0代表坏瓜
y = LabelEncoder().fit_transform(y)
# 再来查看一下y
y

在这里插入图片描述
可见,转化成功。

没有做特征工程,感觉没啥好做的,但是并不是没得做,有兴趣的可以探索一下。
# 切分训练集和测试集
Xtrain, Xtest, Ytrain, Ytest = tts(x,y,test_size = 0.3,random_state=30)
建立模型
# 训练,默认参数,默认选节点的指标是基尼系数
model = tree.DecisionTreeClassifier()
model = model.fit(Xtrain,Ytrain)
# 测试
p = model.predict(Xtest)
score = acc(p,Ytest)
score

在这里插入图片描述
可见,默认参数建立的模型,准确率只有0.66…,不算高。
来观察这一棵树是怎么来做决策的。

dot_data = tree.export_graphviz(model
                                ,out_file = None
                                ,feature_names= data_dm.columns[2:]
                                ,class_names=["好瓜","坏瓜"]
                                ,filled=True
                                ,rounded=True
                                )
graph = graphviz.Source(dot_data)
graph

在这里插入图片描述

# 我瞎调一下模型的参数,在这里只做对两个参数的探究:min_samples_leaf,min_samples_split
model = tree.DecisionTreeClassifier(criterion="entropy"
                                 ,random_state=30
                                 ,splitter="random"
                                  ,min_samples_leaf=3
                                  ,min_samples_split=2
                                 )
model = model.fit(Xtrain,Ytrain)
p = model.predict(Xtest)
score = acc(p,Ytest)
score

在这里插入图片描述
可见,准确率上来了,但是,这是不是最优的呢?
那就要去探索一下了。

分享两种调参方法
  • 画学习曲线:一般是探索某一个参数
  • 网格搜索:探索多个参数的最优参数组合。
画学习曲线

在这里只探索min_samples_leaf

test = []
for i in range(5):
    model = tree.DecisionTreeClassifier(criterion="entropy"
                                     ,random_state=30
                                     ,splitter="random"
                                      ,min_samples_leaf=i+1
                                      ,min_samples_split=2
                                     )
    clf = model.fit(Xtrain, Ytrain)
    score = model.score(Xtest, Ytest)
    test.append(score)
plt.plot(range(1,6),test,color="red",label="min_samples_leaf")
plt.legend()
plt.show()

在这里插入图片描述
可见,有一个准确率达到了1.0。即在这个测试集上,能达到100%的准确率。
那么我们来看一下是不是真的?

model = tree.DecisionTreeClassifier(criterion="entropy"
                                 ,random_state=30
                                 ,splitter="random"
                                  ,min_samples_leaf=2
                                  ,min_samples_split=2
                                 )
model = model.fit(Xtrain,Ytrain)
p = model.predict(Xtest)
score = acc(p,Ytest)
score

在这里插入图片描述
嗯,确实如此。

网格搜索
from sklearn.model_selection import GridSearchCV
gs = GridSearchCV(model, {'min_samples_leaf':range(1,5), 'min_samples_split':range(2,5)})
gs

在这里插入图片描述
观察网格搜索出来的参数,min_samples_leaf=2,min_samples_split=2。
我们把搜索出来的参数全都填进去。观察是不是最优的参数?

model = tree.DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None,
                                              criterion='gini', max_depth=None,
                                              max_features=None,
                                              max_leaf_nodes=None,
                                              min_impurity_decrease=0.0,
                                              min_impurity_split=None,
                                              min_samples_leaf=2,
                                              min_samples_split=2,
                                              min_weight_fraction_leaf=0.0,
                                              presort='deprecated',
                                              random_state=30,
                                              splitter='best')
model = model.fit(Xtrain,Ytrain)
p = model.predict(Xtest)
score = acc(p,Ytest)
score

在这里插入图片描述
嗯,也确实如此。

Thank you!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习面试题pdf是一份包含机器学习相关问题的文档,通常用于准备机器学习职位的面试。这类面试题包括理论和实践两方面的内容。 在理论方面,机器学习面试题可能会涉及基本概念、模型选择与评估、特征工程、模型调参等方面的问题。例如,常见的问题包括机器学习的基本定义、监督学习与无监督学习的区别、过拟合与欠拟合问题的解决方法等等。这些问题考察了应聘者对于机器学习算法和模型的理解程度。 在实践方面,机器学习面试题可能会要求应聘者运用机器学习算法来解决实际问题。这种类型的问题可能涉及数据预处理、特征选择与提取、建模、模型评估等多个步骤。应聘者需要运用所学的机器学习知识,选择适当的算法和工具,处理和分析给定的数据,并给出合理的解决方案。 对于准备机器学习面试的应聘者来说,机器学习面试题pdf是一个宝贵的资源。应聘者可以通过研究和解答这些问题,巩固和扩展自己的机器学习知识,并了解常见的面试考点和答题思路。此外,应聘者还可以利用机器学习面试题pdf进行自我评估和练习,提高应对面试问题的能力。 总的来说,机器学习面试题pdf对于机器学习职位的应聘者来说是一份重要的学习和准备资料。通过认真研究和解答这些问题,应聘者可以提高自己的机器学习理论水平和实践能力,增加面试成功的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值