当前位置: 首页 > 编程日记 > 正文

机器学习-Sklearn

Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.

Sklearn 包含了很多种机器学习的方式:Classification 分类
Regression 回归
Clustering 非监督分类
Dimensionality reduction 数据降维
Model Selection 模型选择
Preprocessing 数据预处理
我们总能够从这些方法中挑选出一个适合于自己问题的, 然后解决自己的问题.

安装

Scikit-learn (sklearn)

Windows 注意事项 
如果你是 Windows 用户, 你也可以选择使用 Anaconda 来安装所有 python 的科学计算模块. Anaconda的相关资料在这

一般使用

1、选择学习方法:看图

Sklearn 官网提供了一个流程图, 蓝色圆圈内是判断条件,绿色方框内是可以选择的算法:

从 START 开始,首先看数据的样本是否 >50,小于则需要收集更多的数据。由图中,可以看到算法有四类,分类,回归,聚类,降维。其中 分类和回归是监督式学习,即每个数据对应一个 label。

聚类 是非监督式学习,即没有 label。
另外一类是 降维,当数据集有很多很多属性的时候,可以通过 降维 算法把属性归纳起来。
例如
20 个属性只变成 2 个,注意,这不是挑出 2 个,而是压缩成为 2 个,
它们集合了 20 个属性的所有特征,相当于把重要的信息提取的更好,不重要的信息就不要了。
然后看问题属于哪一类问题,是分类还是回归,还是聚类,就选择相应的算法。 当然还要考虑数据的大小,例如 100K 是一个阈值。可以发现有些方法是既可以作为分类,也可以作为回归,例如 SGD。

回归:regression 英 /rɪ'greʃ(ə)n/  /rɪ'ɡrɛʃən/ 

聚类:clustering  /'klʌstərɪŋ/  /'klʌstɚ/ 

维度:dimensionality  /dɪ,menʃə'nælətɪ/  /daɪmɛnʃə'næləti/ 

2、通用学习模式

要点
导入模块
创建数据
建立模型-训练-预测

要点 

sklearn包不仅囊括很多机器学习的算法,也自带了许多经典的数据集,鸢尾花数据集就是其中之一。

Sklearn 把所有机器学习的模式整合统一起来了,学会了一个模式就可以通吃其他不同类型的学习模式。例如,分类器,Sklearn 本身就有很多数据库,可以用来练习。 以 Iris 的数据为例,这种花有四个属性,花瓣的长宽,茎的长宽,根据这些属性把花分为三类。我们要用 分类器 去把四种类型的花分开。
# 导入模块
import pandas as pd
# sklearn包不仅囊括很多机器学习的算法,也自带了许多经典的数据集,(yuan)鸢尾花数据集就是其中之一。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 创建数据
# 加载 iris 的数据,把属性存在 X,类别标签存在 y
iris = datasets.load_iris()
iris_X = iris.data      
iris_y = iris.target
# 观察一下数据集,X 有四个属性,y 有 0,1,2 三类:
print(iris_X[:2, :])
print(iris_y)
# 把数据集分为训练集和测试集,其中 test_size=0.3,即测试集占总数据的 30%:
X_train, X_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size=0.3)
# 可以看到分开后的数据集,顺序也被打乱,这样更有利于学习模型:
print(y_train)
# 建立模型-训练-预测# 定义模块方式 KNeighborsClassifier(), 用 fit 来训练 training data,这一步就完成了训练的所有步骤, 后面的 knn 就已经是训练好的模型,可以直接用来 predict 测试集的数据, 对比用模型预测的值与真实的值,可以看到大概模拟出了数据,但是有误差,是不会完完全全预测正确的。、
knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
print(knn.predict(X_test))
print(y_test)

3、sklearn 强大数据库

要点
导入模块
导入数据-训练模型
创建虚拟数据-可视化

学习资料:

  • 相关代码
  • 更多可用数据 网址

今天来看 Sklearn 中的 datasets,很多而且有用,可以用来学习算法模型。

eg: boston 房价, 糖尿病, 数字, Iris 花。也可以生成虚拟的数据,例如用来训练线性回归模型的数据,可以用函数来生成。
from __future__ import print_function
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt# 导入数据-训练模型 
# 用 datasets.load_boston() 的形式加载数据,并给 X 和 y 赋值,这种形式在 Sklearn 中都是高度统一的。
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target# 定义模型。
model = LinearRegression()# 线性回归
model.fit(data_X, data_y)# 再打印出预测值,这里用 X 的前 4 个来预测,同时打印真实值,作为对比,可以看到是有些误差的。print(model.predict(d
print(model.predict(data_X[:4, :]))
print(data_y[:4])
# 为了提高准确度,可以通过尝试不同的 model,不同的参数,不同的预处理等方法,入门的话可以直接用默认值。# 创建虚拟数据-可视化
# 用函数来建立 100 个 sample,有一个 feature,和一个 target,这样比较方便可视化。    
# 用 scatter(散点图) 的形式来输出结果。                    
X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)
plt.scatter(X, y)
plt.show()
# 可以看到用函数生成的 Linear Regression 用的数据。# noise 越大的话,点就会越来越离散,例如 noise 由 10 变为 50.
X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=50)
plt.scatter(X, y)
plt.show()




noise float, optional (default=0.0)

The standard deviation of the gaussian noise applied to the output.

高斯噪声对输出的标准差。

4、 sklearn 常用属性与功能

训练和预测
参数和分数
from sklearn import datasets
from sklearn.linear_model import LinearRegressionloaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.targetmodel = LinearRegression()
# 训练和预测
# 接下来 model.fit 和 model.predict 就属于 Model 的功能,用来训练模型,用训练好的模型预测。
model.fit(data_X, data_y)print(model.predict(data_X[:4, :]))
# 参数和分数# 然后,model.coef_ 和 model.intercept_ 属于 Model 的属性, 例如对于 LinearRegressor 这个模型,
# 这两个属性分别输出模型的斜率和截距(与y轴的交点)。
print(model.coef_)
print('-----------------')
print(model.intercept_)
# model.get_params() 也是功能,它可以取出之前定义的参数。
print(model.get_params())
# model.score(data_X, data_y) 它可以对 Model 用 R^2 的方式进行打分,输出精确度。
# 关于 R^2 coefficient of determination 可以查看 wiki
print(model.score(data_X, data_y)) # R^2 coefficient of determination
0.7406077428649428
 

高级使用

1、正规化 Normalization

由于资料的偏差与跨度会影响机器学习的成效,因此正规化(标准化)数据可以提升机器学习的成效。
# 正规化 Normalization# 数据标准化from sklearn import preprocessing #标准化数据模块
import numpy as np#建立Array
a = np.array([[10, 2.7, 3.6],[-100, 5, -2],[120, 20, 40]], dtype=np.float64)
print(a)
print('--------------------')
#将normalized后的a打印出
print(preprocessing.scale(a))
[[
10. 2.7 3.6][-100. 5. -2. ][ 120. 20. 40. ]] -------------------- [[ 0. -0.85170713 -0.55138018][-1.22474487 -0.55187146 -0.852133 ][ 1.22474487 1.40357859 1.40351318]]# 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。 # 标准方差(standard deviation)就是方差的平方根, # 一组数据中的每一个数与这组数据的平均数的差的平方的和再除以数据的个数,取平方根即是。# 使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。 # 可以使用preprocessing.normalize()函数对指定数据进行转换: # 可以使用processing.Normalizer()类实现对训练集和测试集的拟合和转换:# 数据标准化对机器学习成效的影响 # 加载模块 -------------------------------------------------------------------------------------------------------------------- # 标准化数据模块 from sklearn import preprocessing import numpy as np# 将资料分割成train与test的模块 from sklearn.model_selection import train_test_split# 生成适合做classification资料的模块 from sklearn.datasets.samples_generator import make_classification # Support Vector Machine中的Support Vector Classifier from sklearn.svm import SVC # 可视化数据的模块 import matplotlib.pyplot as plt # 生成适合做Classification数据#生成具有2种属性的300笔数据 X, y = make_classification(n_samples=300, n_features=2,n_redundant=0, n_informative=2, random_state=22, n_clusters_per_class=1, scale=100)#可视化数据 plt.scatter(X[:, 0], X[:, 1], c=y) plt.show()
# 数据标准化前# 标准化前的预测准确率只有0.5111111111111111

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = SVC()
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))
# 数据标准化后# 数据的单位发生了变化, X 数据也被压缩到差不多大小范围.# 标准化后的预测准确率提升至0.9111111111111111
X = preprocessing.scale(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = SVC()
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))
0.9111111111111111

检验神经网络 (Evaluation)

Training and Test data
误差曲线
准确度曲线
正规化
交叉验证
  • Theano: l1 l2 regularization 教程
  • Scikit-learn: cross validation 教程1
  • Scikit-learn: cross validation 教程2
  • Scikit-learn: cross validation 教程3
  • Tensorflow: dropout 教程
今天我们会来聊聊在做好了属于自己的神经网络之后, 应该如何来评价自己的神经网络, 从评价当中如何改进我们的神经网络. 
其实评价神经网络的方法, 和评价其他机器学习的方法大同小异. 我们首先说说为什么要评价,检验学习到的神经网络.

交叉验证 1 Cross-validation

Model 基础验证法
Model 交叉验证法(Cross Validation)
以准确率(accuracy)判断
以平均方差(Mean squared error)

Sklearn 中的 Cross Validation (交叉验证)对于我们选择正确的 Model 和 Model 的参数是非常有帮助的,
有了他的帮助,我们能直观的看出不同 Model 或者参数对结构准确度的影响。

交叉验证 2 Cross-validation

sklearn.learning_curve 中的 learning curve 可以很直观的看出我们的 model 学习的进度, 
对比发现有没有 overfitting 的问题. 然后我们可以对我们的 model 进行调整, 克服 overfitting 的问题.

Learning curve 检视过拟合

转载于:https://www.cnblogs.com/foremostxl/p/10357621.html

相关文章:

[翻译]自动维护索引重新生成组织的SQL批处理语句

脚本来自《Inside Server 2005 T-SQL Programming》 SET NOCOUNT ON;DECLARE objectid int;DECLARE indexid int;DECLARE partitioncount bigint;DECLARE schemaname nvarchar(258);DECLARE objectname nvarchar(258);DECLARE indexname nvarchar(258);DECLARE partitionnum bi…

DTrace memory leak 内存泄露

http://blog.sina.com.cn/s/blog_538040b70100eecn.html如下程序用于跟踪,在分配和回收都会触发探针 #!/usr/sbin/dtrace -s pid$target:libc:malloc:entry{ self->trace 1; self->size arg0;}pid$target:libc:malloc:return/self->trace 1/{ …

Spark的安装和使用

Spark2.1.0入门:Spark的安装和使用 Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0(2.7.1)/Ubuntu14.04(16.04) 手把手教你在VirtualBox中与主机共享文件夹

SQL Server 2005系列教学(6) 多表操作及子查询

多表查询&#xff1b;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />人事表&#xff1a; 公司表&#xff1a;姓名性别年龄姓名公司地址张三男25李四女25张三新…

(点)分治学习笔记

哗我看了一下好像没有很详细专门讲分治的blog&#xff1f;那就主要先学一下点分治吧&#xff0c;其他的……等我记得把C一本通带到机房来再说吧先咕着啦 写在前面 刷题进度 入门题&#xff08;0/3&#xff09; 好题(0/9) 问题解决进度 Q1 Q2 正文 淀粉质 点分治 点分治就是在一…

十五个步骤收获学习的习惯

"真正的发现的航程&#xff0c;并非是在寻找新的土地,而且用新的视界去寻找"--普鲁斯特 "智慧日进者方值得尊敬。"-林肯 "我从不让我在学校所学的干扰我的教育"-马克吐温 如果公立学校尚未摧残你的灵魂&#xff0c;那么学习是一项极佳的活动。它…

熟悉scala命令,scala语言运行超级素数和猴子大王

实验目的 在Linux操作系统中安装Scala输入“scala”命令&#xff0c;熟悉地运行Scala解释器scala语言运行超级素数和猴子大王实验仪器 Virtualbox管理器 实验框图&#xff08;电路图/流程图&#xff09; 在Windows中使用VirtualBox安装Ubuntu&#xff0c;安装好scala后&#xf…

安装mayavi和VTK库的血泪史

一开始安装VTK库是从官网上下载&#xff0c;但是怎么都找不到whl文件&#xff0c;只有exe文件&#xff08;vtkpython-7.1.1-Windows-64bit.exe&#xff09;。下载安装之后再PyCharm中import vtk出错。当时认为是文件出错。后来在一篇博客&#xff08;Python下VTK 编程 - lj6952…

Python LEGB (Local, Enclosing, Global, Build in) 规则

1 Local 一个函数定义了一个 local 作用域; PyFrameObject 中的 f_local 属性2 Global 一个 module 定义了一个 global 作用域; PyFrameObject 中的 f_global 属性.3 BuiltIn open, dir 的作用域等等, python 最顶层的作用…

图解DotNet框架系列

图解.Net框架系列(索引贴) (声明:本系列已完成,故索引帖重发) 众所周知,DotNet框架是非常庞大的,光项目创建时的种类就有WPF,WCF,WF这三种最新的技术,还有以前的Web,WinForm,Service,Mobile等等. 这么复杂和庞大的框架,用文字来描述是远远不够的,所以我准备写一系列图文并茂的文…

【Linux基础】文件处理实例

1.文件拆分 //每4000行拆分一个文件 split -l 4000 epms_t_ep_fx_stl_xy_20190129.dat 2.行处理 //查找第二列为711611且第三列为711100记录&#xff0c;打印行号和整行数据 awk -F ‘^C’ {if ($3711100 && $2711611) print NR,$0 } epms_t_ep_fx_stl_xy_20190229.d…

scala语言运行递归“分鱼”程序

A、B、C、D、E 五人在某天夜里合伙去捕鱼&#xff0c;到第二天凌晨时都疲惫不堪&#xff0c;于是各自找地方睡觉。 日上三杆&#xff0c;A 第一个醒来&#xff0c;他将鱼分为五份&#xff0c;把多余的一条鱼扔掉&#xff0c;拿走自己的一份。 B 第二个醒来&#xff0c;也将鱼分…

smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...

smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数&#xff0c;可用于smarty。function smarty_modifier_truncate($string, $length 80, $etc ..., $codeutf8, $mbtrue) { if ($length 0) return $string; if(function_exists("mb_subs…

java基础小总结(2)

Day07&#xff1a; 1.如果局部变量和全局变量都有相同的数据类型和变量名&#xff0c;先调用局部变量&#xff0c;实现就近原则&#xff1b; 2.匿名对象由于局限性的原因&#xff0c;一般只调用一次&#xff0c;且只是当作为实际参数传递的时候使用&#xff1b; 3.面向对象语言…

Wireshark实验HTTP

在 Wireshark 实验入门里&#xff0c;我们已经初步使用了 Wireshark 包嗅探器&#xff0c;我们现在可以操作 Wireshark 来查看网络协议。在这个实验中&#xff0c;我们会探索 HTTP 协议的几个方面&#xff1a;基本的 GET/response 交互&#xff0c;HTTP 消息格式&#xff0c;检…

2、安装ICS(Internet Component Suite)控件

下载完成后解压到你的指写目录&#xff01;1、在library里加入ICS->Delphi->Vc32目录。2、从File->Open中打开ICS->Delphi->Vc32->IcsDel110.dproj文件。(文件名在其它Delphi版本略有不同)3、在项目管理器中&#xff0c;右键IcsDel110.bpl选择Build和Install…

定制CE系统随笔-续1

更改用户界面颜色[HKEY_LOCAL_MACHINE\SYSTEM\GWE] "SysColor"hex: 00,00,00,00, 3A,6E,A5,00, 00,00,00,00, 00,00,00,00,\ EF,EB,DE,00, FF,FF,FF,00, 00,00,00,00, 00,00,00,00,\ 00,00,00,00, FF,F…

安装包安全测试

主要说明以下内容&#xff1a;1、能否反编译代码2、安装包是否签名3、完整性校验4、权限设置检查反编译代码&#xff1a;移动应用发布出去后最终用户获得的是一个程序安装包&#xff0c;我们需要关注的是用户能否从这个安装包中获取项目的源代码&#xff0c;从安全方面考虑&…

Java课程寒假之开发记账本软件(网页版)之二

一.实现基础功能之一&#xff08;记账&#xff09; 一个记账本最基础之一的功能就是记账&#xff0c;所以也是首先要解决的问题&#xff0c;我选择了上学期使用的MySQL数据库来对账本进行存储。 我选择记账的方法是分开记账&#xff0c;就是支出放在一个表&#xff0c;收入放在…

谷歌浏览器Google Chrome和Adobe Flash Plugins插件安装问题

最近在做CSS的多浏览器支持&#xff0c;于是安装上了谷歌浏览器Google Chrome浏览器&#xff0c;结果发现谷歌浏览器Google Chrome的确构造非常简单&#xff0c;精干&#xff0c;速度非常迅猛&#xff0c;比臃肿的IE8快多了&#xff0c;于是开始使用谷歌浏览器Google Chrome&am…

Wireshark实验 - 入门

# Wireshark实验 - 入门 **官方英文文档&#xff1a;[Wireshark_Intro_v6.0.pdf](Wireshark_Intro_v6.0.pdf)** **以下内容为笔者翻译&#xff1a;** *** ## Wireshark 实验: 入门 v6.0 **《计算机网络&#xff1a;自顶向下方法&#xff08;第6版&#xff09;》补充材料&…

观察者模式的经典应用(猫叫 烧开水)

Code 猫叫了 老鼠跑 主人惊醒 1/**//* 2 * 题目&#xff1a; 3 * 猫叫了&#xff0c;所有老鼠开始逃跑&#xff0c;主人被惊醒&#xff0c;请用OO的思想描绘此过程 4 * 1&#xff0c;老鼠跟主人是被动的 5 * 2&#xff0c;要考虑联动性与扩展性 6 */ 7using System; 8using Sys…

HTML学习笔记之基本介绍

超文本标记语言 (Hyper Text Markup Language&#xff0c;HTML&#xff09;不是一种编程语言&#xff0c;而是一种标记语言&#xff0c;用一套标记标签描述网页 HTML 标记标签又被称为 HTML 标签&#xff08;HTML Tag&#xff09;&#xff0c;它是由尖括号包围的关键词&#xf…

系统分析与设计 实验一用例模型

图书管理系统系统分析及用例图 图书管理系统能够为一定数量的借阅者提供服务。每个借阅者能够拥有唯一标识其存在的编号。图书馆向每一个借阅者发放图书证&#xff0c;图书证中包含每一个借阅者的编号和个人信息。系统通过一个单独的程序为借阅者提供服务&#xff0c;不需要管理…

2017.9.12.语文

列夫尼古拉耶维奇托尔斯泰&#xff08;Лев Николаевич Толстой&#xff0c;1828年9月9日&#xff0d;1910年11月20日&#xff09;19世纪中期俄国批判现实主义作家、思想家、哲学家。 转载于:https://www.cnblogs.com/mldyz/p/7510750.html

一封会笑死人的校园情书

Kiss郝美丽&#xff1a; Sorry&#xff01;我把Miss拼成了Kiss&#xff0c;一不小心吻了你&#xff0c;实在是对不起&#xff01; 吾本良家子弟&#xff0c;正统少年&#xff0c;一向对美眉们保持一种昂首挺胸&#xff0c;目不斜视的高姿态&#xff0c;人送美名…

Java面试题之多线程同步和互斥有几种实现方法,都是什么?

线程同步是指线程之间所具有的一种制约关系&#xff0c;一个线程的执行依赖另外一个线程的消息&#xff0c;当它没有得到另一个线程的消息时应等待&#xff0c;直到消息到达时才被唤醒。 线程互斥是指对于共享的进程系统资源&#xff0c;每个线程访问时的排他性。当有若干个线程…

1)头结点,头指针,

http://blog.csdn.net/zhenyusoso/article/details/6092843 转载于:https://www.cnblogs.com/xiaoyoucai/p/7512001.html

软件测试实验--数据工厂DataFactory+MySQL数据构造

数据工厂---DataFactoryMySQL数据构造 显示成功&#xff0c;但测出来的是啥...

杀进程和取文件最近使用时间

unit uFTPclient; interface uses SysUtils,Windows,Tlhelp32; const FILE_CREATE_TIME0; //文件建立时间 FILE_MODIFY_TIME1; //修改时间 FILE_ACCESS_TIME2; //最后访问时间 type TFileTimes (ftLastAccess, ftLastWrite, ftCreation); //文件是否…