taoyx.log co"> 机器学习-Sklearn - 11GX
首页 > 机器学习-Sklearn

机器学习-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

更多相关:

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...

  • 打开 build文件夹下面的webpack.base.conf.js; 找到下面这段代码,并将它注释掉: const createLintingRule = () => ({// test: /.(js|vue)$/,// loader: 'eslint-loader',// enforce: 'pre',// includ...

  • 写一个.cc文件,其中抱哈std::lock_guard以及std::thread等c++11特性,开始使用gcc编译,过程中出现如下问题 gcc test_lock.cc -o test_lock This file requires compiler and library support for the ISO C++ 201...

  • 在阅读ceph源码过程中发现部分C++语法还是不够熟悉,特此做一下笔记。 关于STL中的reserve函数的使用 reserve()是为容器预留空间,即为当前容器设定一个空间分配的阈值,但是并不会为容器直接allocate具体的空间,具体空间的分配是在创建对象时候进行分配得 以vector的reserve函数过程为例,直接看如下代码...

  • 第一种写法: 第二种写法:   转载于:https://www.cnblogs.com/w...

  • Rank() over()的用法 创建一个test表,并插入6条数据。 CREATE TABLE test (a INT,b INT,c CHAR ) INSERT INTO test VALUES(1,3,'E') INSERT INTO test VALUES(2,4,'A') INSERT INTO test VAL...

  • #coding:utf-8'''Created on 2017年10月25日@author: li.liu'''import pymysqldb=pymysql.connect('localhost','root','root','test',charset='utf8')m=db.cursor()'''try:#a=raw_inpu...

  • python数据类型:int、string、float、boolean 可变变量:list 不可变变量:string、元组tuple 1.list list就是列表、array、数组 列表根据下标(0123)取值,下标也叫索引、角标、编号 new_stus =['刘德华','刘嘉玲','孙俪','范冰冰'] 最前面一个元素下标是0,最...

  • from pathlib import Path srcPath = Path(‘../src/‘) [x for x in srcPath.iterdir() if srcPath.is_dir()] 列出指定目录及子目录下的所有文件 from pathlib import Path srcPath = Path(‘../tenso...

  • 我在使用OpenResty编写lua代码时,需要使用到lua的正则表达式,其中pattern是这样的, --热水器设置时间 local s = '12:33' local pattern = "(20|21|22|23|[01][0-9]):([0-5][0-9])" local matched = string.match(s, "...

  • 在分析ats的访问日志时,我经常会遇到将一些特殊字段对齐显示的需求,网上调研了一下,发现使用column -t就可以轻松搞定,比如 找到ATS的access.log中的200响应时间过长的日志 cat access.log | grep ' 200 ' | awk -F '"' '{print $3}' > taoyx.log co...