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)) 
0.946666666667

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)) 
0.0722666666667

决策树(Decision Tree)

每个节点上对某个特征进行判断,根据结果转向某个分支,如图是一个决策树示意图,每个节点根据某个条件分裂节点

1.在Python中调用决策树算法

from sklearn import tree 
#决策树分类
dt=tree.DecisionTreeClassifier()
#决策树回归
dt=tree.DecisionTreeRegressor()

2.iris数据集上应用决策树分类

from sklearn import tree
#设定X,y值
features=['SepalLengthCm','SepalWidthCm','PetalLengthCm']
X=iris[features]

from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
le.fit(iris['Species'])
y=le.transform(iris['Species'])
#设定模型
dt=tree.DecisionTreeClassifier()
#训练模型,并得到准确率
from sklearn.model_selection import cross_val_score

score=cross_val_score(dt,X,y,cv=5,scoring='accuracy')
print(np.mean(score))
0.913333333333

3.iris数据集上应用决策树回归

from sklearn import tree
#重新设定X,y值,回归对象是iris花的PetalWidthCm
features=['SepalLengthCm','SepalWidthCm','PetalLengthCm']
X=iris[features]
y=iris['PetalWidthCm']
#设定决策树回归的模型
dt=tree.DecisionTreeRegressor()
from sklearn.model_selection import cross_val_score
scores=-cross_val_score(dt,X,y,scoring='neg_mean_squared_error')
print(np.mean(scores))
0.604266666667

随机森林

随机森林算法可以用于解决分类和回归问题,在决策树的基础上,引入了多棵决策树,并综合所有决策树,根据少数服从多数(majority voting)或者求平均值等原则,得出结果,下图是随机森林的示意图:

一般而言,随机森林的分类和回归的效果会比KNN、Decision Tree更好

集成学习:构建多个模型,使用某种策略将多个结果集成起来,作为最终结果,随机森林也属于集成学习,随机森林回归可以通过对各个模型结果加权平均得到结果,随机森林分类可以通过majority voting原则来决定结果

1.Python调用随机森林算法

from sklearn import ensemble
#随机森林分类
rf=ensemble.RandomForestClassifier(决策树数)
#随机森林回归
rf=ensemble.RandomForestRegressor(决策树数)
rf.fit(X,y)

2.iris数据集上应用随机森林分类

from sklearn import ensemble
#设定随机森林分类模型
rf=ensemble.RandomForestClassifier(10)
from sklearn.model_selection import cross_val_score
#随机森林分类,X,y可以根据你想探究的字段之间的关系进行设置
features=['SepalLengthCm','SepalWidthCm','PetalLengthCm']
X=iris[features]
from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
le.fit(iris['Species'])
y=le.transform(iris['Species'])
#评估分类模型性能
score=cross_val_score(rf,X,y,cv=5,scoring='accuracy')
print(np.mean(score))
0.933333333333

3.iris数据集上随机森林回归

from sklearn import ensemble
#设定随机森林回归模型
rf=ensemble.RandomForestRegressor(10)
#随机森林分类,X,y可以根据你想探究的字段之间的关系进行设置
features=['SepalLengthCm','SepalWidthCm','PetalLengthCm']
X=iris[features]
y=iris['PetalWidthCm']
#评估模型性能
score=-cross_val_score(rf,X,y,cv=5,scoring='neg_mean_squared_error')
print(np.mean(score))
0.0414655696296

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/478103

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。