数据分析师(入门) DC学院
本节视频主要内容是三个算法:kNN、DecisionTree、RandomForest,以及集成学习的思想
k近邻(kNN)
原理:看新样本和训练集中的样本最接近的是哪一类,往往需要引入距离的计算
距离:根据特征向量X计算不同样本之间的距离,d(X’,X”),最常用的是欧式距离
k近邻回归 :找到距离最近的K个样本,计算平均值
k近邻分类 :找到距离最近的K个样本,少数服从多数
也可在算法中将距离作为权重加权(如weight=1/d),使得离待判样本越近距离的训练集样本的权重越大
1.在Python中调用KNN算法
依旧使用到scikit-learn库
#用neighbors包来实现k近邻
from sklearn
import neighbors
#k近邻分类
knn=neighbors.KNeighborsClassifier(n_neighbors,weights=
'uniform')
#k近邻回归
knn=neighbors.KNeighborsRegressor(n_neighbors,weights=
'uniform')
#训练模型
knn.fit(X,y)
score=cross_val_score(knn,X,y,scoring=
'设定参数')
n_neighbors参数为近邻的数量k
weights参数可以设定为uniform(即k个近邻点的权重都相同) 或者 distance(即k个近邻点的权重为距离的倒数)
2.iris数据集上使用KNN进行分类
#导入iris的数据集
import pandas
iris =pandas.read_csv(
'http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=
None)
iris.columns=[
'SepalLengthCm',
'SepalWidthCm',
'PetalLengthCm',
'PetalWidthCm',
'Species']
iris.sample(
10)
#数值化species字段
from sklearn.preprocessing
import LabelEncoder
#初始化label
le=LabelEncoder()
le.fit(iris[
'Species'])
#用离散值转化标签值
y=le.transform(iris[
'Species'])
print(y)
features=[
'PetalLengthCm']
X=iris[features]
from sklearn
import neighbors
#k近邻分类,这里选择5个近邻
knn=neighbors.KNeighborsClassifier(
5,weights=
'uniform')
#可以使用fit 或者cross_val_score 函数来得到结果
from sklearn.model_selection
import cross_val_score
score=cross_val_score(knn,X,y,cv=
5,scoring=
'accuracy')
import numpy
as np
print(np.mean(score))
#尝试对函数的默认参数进行修改,如加权的方式、近邻的数量,看看结果如何
#尝试和上一节视频中学习过的linear regression的方法进行比较,看看哪种算法分类的效果更好
3.iris数据集上使用KNN进行回归
features=[
'PetalLengthCm']
X=iris[features]
from sklearn
import neighbors
#k近邻回归
knn=neighbors.KNeighborsRegressor(
5,weights=
'uniform')
#可以使用fit 或者cross_val_score函数来得到结果,修改成回归的评分标准
from sklearn.model_selection
import cross_val_score
score=-cross_val_score(knn,X,y,cv=
5,scoring=
'neg_mean_squared_error')
print(np.mean(score))
决策树(Decision Tree)
每个节点上对某个特征进行判断,根据结果转向某个分支,如图是一个决策树示意图,每个节点根据某个条件分裂节点