使用scikit-learn 估计器分类
本章的几个概念:
估计器(estimator) 用于分类、聚类和回归分析
转换器(transformer):用于数据预处理回来数据转换
流水线(pipeline): 组合数据挖掘流程, 便于在此使用
1.scikit-learn估计器
数据集下载地址:UCI
加载数据集:
#coding=gbk
#python 数据挖掘入门与实践
#第2章: 使用scikit-learn 估计器分类
#估计器(estimator) 用于分类、聚类和回归分析
#转换器(transformer):用于数据预处理回来数据转换
#流水线(pipeline): 组合数据挖掘流程, 便于在此使用
import numpy as np
import csv
X = np.zeros((351,34), dtype = 'float')
y = np.zeros((351,), dtype = 'int') #原文中dtype 为'float' ,此处应该为 int 类型,其自动将true 转换成 1 ,false转换成 0
#加载数据集
with open(r'D:\datasets\ionosphere.csv','r') as input_file:
reader = csv.reader(input_file)
for i , row in enumerate(reader):
data = [float(datum) for datum in row[:-1]] #将前34个特征保存到x 中
X[i]= data
y[i] = row[-1]=='g' #把字母型转换成数值型
print(X[:5])
print(y[:9])
实现流程的标准化:
#创建训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state= 14)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier() #使用KNN 算法
knn.fit(X_train, y_train)
y_predicted = knn.predict(X_test)
accuracy = np.mean(y_predicted == y_test) *100
print('the accuracy is %.1f'%accuracy) # the accuracy is 86.4
#使用交叉验证
from sklearn.model_selection import cross_val_score
scores = cross_val_score(knn, X, y, scoring= 'accuracy')
average_score = np.mean(scores) * 100
print('the average accuracy is %.1f'%average_score+'%') # the average accuracy is 82.3%
#作者say:考虑到还没有进行调参数, 这个结果还是相当不错
设置参数:
#设置参数
#测试一系列的n_neighbors 一系列的值, 进行重复多次试验, 观察参数值带来的结果之间的差异
ave_score =[]
all_score = []
for n_neighbors in range(1,21):
estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
scores = cross_val_score(estimator, X, y, scoring= 'accuracy')
all_score.append(scores)
ave_score.append(np.mean(scores))
print(ave_score)
import matplotlib.pyplot as plt
x1 = range(1,21)
plt.plot(x1, ave_score, '-o')
plt.show() #有图知道, 随着 K 值得增大 , 整体的正确率趋势是下降的
2.流水线在预处理中的使用
不同特征的取值范围千差万别, 常见的方法是对不同的特征进行规范化,使他们的特征值落在相同的值域或者是属于某几个确定的类别
一旦解决这个问题, 不同的特征类型对算法的影响将大大降低, 分类的正确率就有大大的提升
sckit-learn 的预处理工具 称为 转换器(Transfomer),它接受原始数据集, 返回的是转换后的数据集。除了,处理数值型的特征还能用于抽取特征
X_broken = np.array(X)
X_broken[:,::2] /=10 #每隔一行, 就把第二个特征的值除以10
knn2 = KNeighborsClassifier()
broken_score = cross_val_score(knn2, X_broken, y, scoring='accuracy')
ave_broken_score = np.mean(broken_score)
print('the broken score accuracy is %.3f'%ave_broken_score) # the broken score accuracy is 0.715
#将特征值转换成 0 到1 之间,以解决问题
#标准预处理:使用MinMaxScalar 类进行规范化处理,规范到0到1 之间
#对X 进行预处理, 有些转换器要求像训练分类器那样先进行训练, 但是MinMaxScalar 不需要, 直接调用 fit_transform 函数,即可以完成训练和转换
from sklearn.preprocessing import MinMaxScaler
X_transform = MinMaxScaler().fit_transform(X_broken)
knn2 = KNeighborsClassifier()
transform_scores = cross_val_score(knn2, X_transform, y, scoring='accuracy')
ave_transform_scores = np.mean(transform_scores) * 100
#MinMaxScaler 将特征规范到相同的值域, 这样特征就不会仅仅因为值大二具备更强的区分度
print('the x_transformed average score is %.2f'%ave_transform_scores) #the x_transformed average score is 82.34
#流水线
#流水线的输入为一系列的数据挖掘的步骤, 其中最后一步必须是估计器, 前几部是转换器。
from sklearn.pipeline import Pipeline
scailing_pipeline = Pipeline([('scale', MinMaxScaler()),
('knn', KNeighborsClassifier())])
scores1 = cross_val_score(scailing_pipeline, X_broken, y, scoring= 'accuracy')
pipeline_score = np.mean(scores1) *100
print('the accuracy is %.2f'%pipeline_score+'%') # the accuracy is 82.34% 与上式结果是一样的
使用scikit-learn 估计器分类的更多相关文章
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)
所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...
- 机器学习-scikit learn学习笔记
scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...
- Linear Regression with Scikit Learn
Before you read This is a demo or practice about how to use Simple-Linear-Regression in scikit-lear ...
- 集成算法(chapter 7 - Hands on machine learning with scikit learn and tensorflow)
Voting classifier 多种分类器分别训练,然后分别对输入(新数据)预测/分类,各个分类器的结果视为投票,投出最终结果: 训练: 投票: 为什么三个臭皮匠顶一个诸葛亮.通过大数定律直观地解 ...
随机推荐
- 在懂得BREW接口的原理之后, 那么该知道BREW接口是如何声明和实现了
参考:http://blog.csdn.net/peteryxk/article/details/1584514 首先介绍几个用到的宏定义: l #define VTBL(iname) ...
- Spring------SpringBoot参考书籍
转载: http://download.csdn.net/download/plus_dy/8972653
- SQL Server--实体再复习
前些天小编所在的组织部重构.组长交给小编一项设计实体的活儿,它是我们软件灵魂(数据)的载体,实体的抽象影响到数据库设计,数据库设计的质量影响到整个程序的运营,以下是我设计的实体关系图: 系统核心业务逻 ...
- NodeJS-002-Expres启动
1.打开app.js文件 2.在module.exports = app;之前输入: app.listen(8100,function(){ console.log("Server Star ...
- GIS-008-ArcGIS JS API 全图
//待服务加载完成后,设置视野范围到全图范围 layer.on('load', function () { var extent = map.getLayer(map.layerIds[0]).ful ...
- Hash表(hash table ,又名散列表)
直接进去主题好了. 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据key而直接进行访问的数据结构.也就是说,它通过把key映射到表中一个位置来访问记录,以加快查找的速度.这个映射函 ...
- django 错误分类及解决办法汇总
问题1:启动服务器后浏览器无法访问http://localhost:8000,访问被拒绝
- SpringBoot(零)-- 工程创建
一.约定优于配置 二.快速创建SoringBoot项目 地址:http://start.spring.io/ 三.在步骤二中,创建好了SpringBootDemo 项目,导入Eclipse 自定义ba ...
- Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交 ...
- system times on machines may be out of sync
今天在hadoop集群执行任务的时候报了一个这个错误,听名字应该是三台机器的时间不同步.于是同步一下时间即可解决 1.安装ntpdate工具 yum -y install ntp ntpdate 2. ...