学好Scikit-Learn,于是你默默地推了一下酷酷的墨镜【上篇】

简介: Scikit-Learn(http://scikit-learn.org)是最流行的程序包之一,它为各种常用机器学习算法提供了高效版本。Scikit-Learn不仅因其干净、统一、管道命令式的API 而独具特色,而且它的在线文档又实用、又完整。

image.png

Scikit-Learn

Scikit-Learn(http://scikit-learn.org)是最流行的程序包之一,它为各种常用机器学习算法提供了高效版本。Scikit-Learn不仅因其干净、统一、管道命令式的API 而独具特色,而且它的在线文档又实用、又完整。

这种统一性的好处是,只要你掌握了Scikit-Learn 一种模型的基本用法和语法,就可 以非常平滑地过渡到新的模型或算法上。


1.1Scikit-Learn的数据表示

数据表

基本的数据表就是二维网格数据,其中的每一行表示数据集中的每个样本,而列表示构成每个样本的相关特征。

例如Ronald Fisher 在1936 年对鸢尾花数据集(http://t.cn/RUJiOHn)的经典分析。

我们用Seaborn 程序库(http://t.cn/RCIYYAp)下载数据并加载到Pandas 的DataFrame 中:

import seaborn as sns
iris = sns.load_dataset('iris')
iris.head()

image.png

其中的每行数据表示每朵被观察的鸢尾花,行数表示数据集中记录的鸢尾花总数。一般情况下,会将这个矩阵的行称为样本(samples),行数记为n_samples。

同样,每列数据表示每个样本某个特征的量化值。一般情况下,会将矩阵的列称为特征(features),列数记为n_features。

特征矩阵

这个表格布局通过二维数组或矩阵的形式将信息清晰地表达出来,所以我们通常把这类矩阵称为特征矩阵(features matrix)。特征矩阵通常被简记为变量X。

它是维度为[n_samples, n_features] 的二维矩阵,通常可以用NumPy 数组或Pandas 的DataFrame 来表示,不过Scikit-Learn 也支持SciPy 的稀疏矩阵。

样本(即每一行)通常是指数据集中的每个对象。例如,样本可能是一朵花、一个人、一篇文档、一幅图像,或者一首歌、一部影片、一个天体,甚至是任何可以通过一组量化方法进行测量的实体。

特征(即每一列)通常是指每个样本都具有的某种量化观测值。一般情况下,特征都是实数,但有时也可能是布尔类型或者离散值。

目标数组

目标数组一般是一维数组,其长度就是样本总数n_samples,通常都用一维的NumPy 数组或Pandas 的Series 表示。目标数组可以是连续的数值类型,也可以是离散的类型/标签。

虽然有些Scikit-Learn 的评估器可以处理具有多目标值的二维[n_samples, n_targets] 目标数组,但此处基本上只涉及常见的一维目标数组问题。

如何区分目标数组的特征与特征矩阵中的特征列,一直是个问题。目标数组的特征通常 是我们希望从数据中预测的量化结果;借用统计学的术语,y就是因变量。以前面的示例数据为例,我们需要通过其他测量值来建立模型,预测花的品种(species),而这里的species 列就可以看成是目标数组。

%matplotlib inline
import seaborn as sns; sns.set()
sns.pairplot(iris, hue='species', size=1.5);

image.png

X_iris = iris.drop('species', axis=1)
X_iris.shape

image.png

y_iris = iris['species']
y_iris.shape

image.png

特征矩阵和目标数组的布局如图

1.2 Scikit-Learn的评估器API

统一性
所有对象使用共同接口连接一组方法和统一的文档。

内省
所有参数值都是公共属性。

限制对象层级
只有算法可以用 Python 类表示。数据集都用标准数据类型(NumPy 数组、Pandas、DataFrame、SciPy 稀疏矩阵)表示,参数名称用标准的Python 字符串。

函数组合
许多机器学习任务都可以用一串基本算法实现,Scikit-Learn 尽力支持这种可能。

明智的默认值
当模型需要用户设置参数时,Scikit-Learn 预先定义适当的默认值。


API基础知识

(1) 通过从Scikit-Learn 中导入适当的评估器类,选择模型类。

(2) 用合适的数值对模型类进行实例化,配置模型超参数(hyperparameter)。

(3) 整理数据,通过前面介绍的方法获取特征矩阵和目标数组。

(4) 调用模型实例的fit() 方法对数据进行拟合。

(5) 对新数据应用模型:

在有监督学习模型中,通常使用predict() 方法预测新数据的标签;

在无监督学习模型中,通常使用transform() 或predict() 方法转换或推断数据的性质。

有监督学习示例:简单线性回归

一个简单线性回归的建模步骤:

import matplotlib.pyplot as plt
import numpy as np

rng = np.random.RandomState(42)
x = 10 * rng.rand(50)
y = 2 * x - 1 + rng.randn(50)
plt.scatter(x, y);

image.png

(1) 选择模型类

想要计算一个简单线性回归模型,那么可以直接导入线性回归模型类:

from sklearn.linear_model import LinearRegression
除了简单线性模型,常用的线性模型还有许多,具体内容请参考sklearn.linear_model模块文档(http://t.cn/Rcprvuz)。

(2) 选择模型超参数:

• 我们想要拟合偏移量(即直线的截距)吗?
• 我们需要对模型进行归一化处理吗?
• 我们需要对特征进行预处理以提高模型灵活性吗?
• 我们打算在模型中使用哪种正则化类型?
• 我们打算使用多少模型组件1?

有一些重要的参数必须在选择模型类时确定好。这些参数通常被称为超参数,即在模型拟合数据之前必须被确定的参数。

model = LinearRegression(fit_intercept=True)
model

image.png

(3) 将数据整理成特征矩阵和目标数组

Scikit-Learn 的数据表示方法,需要二维特征矩阵和一维目标数组。

我们 的目标数组已经有了y(长度为n_samples 的数组),但还需要将数据x 整理成[n_samples, n_features] 的形式。

X = x[:, np.newaxis]
X.shape

image.png

(4) 用模型拟合数据

将模型应用到数据上了,这一步通过模型的fit() 方法即可完成。

model.fit(X, y)

image.png

fit() 命令会在模型内部进行大量运算,运算结果将存储在模型属性中在Scikit-Learn 中,所有通过fit() 方法获得的模型参数都带一条下划线。

model.coef_

image.png

model.intercept_

image.png

这两个参数分别表示对样本数据拟合直线的斜率和截距。与前面样本数据的定义(斜率2、截距-1)进行比对,发现拟合结果与样本非常接近。

(5) 预测新数据的标签

模型训练出来之后,有监督机器学习的主要任务就变成了对不属于训练集的新数据进行预测。在Scikit-Learn 中,我们用predict() 方法进行预测。

xfit = np.linspace(-1, 11)

将这些x 值转换成[n_samples, n_features] 的特征矩阵形式

Xfit = xfit[:, np.newaxis]
yfit = model.predict(Xfit)

把原始数据和拟合结果都可视化出来

plt.scatter(x, y)
plt.plot(xfit, yfit);

image.png

讲完Scikit-Learn的数据表示和评估器API的基础知识、简单线性回归,小天将在下篇中为大家继续带来鸢尾花数据的分类、降维和聚类,还有手写数据的探索,敬请期待吧~

目录
相关文章
|
17天前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
70 8
|
10天前
|
机器学习/深度学习 Python
9-3|使用Python的scikit-learn库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:
9-3|使用Python的scikit-learn库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:
|
1月前
|
机器学习/深度学习 算法 数据挖掘
|
2月前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
19天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
23 0
|
2月前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
24 3
|
2月前
|
机器学习/深度学习 运维 数据挖掘
scikit-learn 1.0 版本重要新特性一览
scikit-learn 1.0 版本重要新特性一览
|
2月前
|
机器学习/深度学习 数据挖掘 Python
简单几步,教你使用scikit-learn做分类和回归预测
简单几步,教你使用scikit-learn做分类和回归预测
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
深入Scikit-learn:掌握Python最强大的机器学习库
【7月更文第18天】在当今数据驱动的世界中,机器学习已成为解锁数据潜力的关键。Python凭借其简洁的语法和丰富的库生态,成为数据科学家和机器学习工程师的首选语言。而在Python的众多机器学习库中,Scikit-learn以其全面、高效、易用的特点,被誉为机器学习领域的“瑞士军刀”。本文旨在深入探讨Scikit-learn的核心概念、实用功能,并通过实战代码示例,带你领略其强大之处。
89 12
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
智能决策新引擎:Python+Scikit-learn,打造高效数据分析与机器学习解决方案!
【7月更文挑战第26天】在数据驱动时代,企业需从大数据中提取价值以精准决策。Python凭借丰富的库成为数据分析利器,而Scikit-learn作为核心工具备受青睐。本文通过电商案例展示如何预测潜在买家以实施精准营销。首先进行数据预处理,包括清洗、特征选择与转换;接着采用逻辑回归模型进行训练与预测;最后评估模型并优化。此方案显著提升了营销效率和企业决策能力,预示着智能决策系统的广阔前景。
75 2
下一篇
无影云桌面