机器学习很难,sklearn很简单

2024-01-11 14:30

本文主要是介绍机器学习很难,sklearn很简单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

好吧,我标题党了,sklearn的简单也是相对于机器学习原理本身,要学好也不容易!

人工智能、机器学习,一听就是高大上的东西,想学会肯定很难。这是当然的,要理解机器学习中的各种算法模型,还是需要较强的数学功底的,这无形中提高了机器学习的门槛。但是只是要用它,却并不困难,scikit-learn的出现给程序员带来了福音,极大的降低了机器学习使用的门槛,即使你不求甚解,也能纯熟的使用各种机器学习的算法来完成自己的目标。

1 sklearn介绍

Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.
Sklearn 包含了很多种机器学习的方式:

  • Classification 分类
  • Regression 回归
  • Clustering 非监督分类
  • Dimensionality reduction 数据降维
  • Model Selection 模型选择
  • Preprocessing 数据预处理

我们总能够从这些方法中挑选出一个适合于自己问题的, 然后用来解决自己的问题.

scikit-learn官网:
https://scikit-learn.org/
在这里插入图片描述

2 一个栗子

我们还是用一个例子来直观感受一下sklearn的用法。

问题:一个分类问题,把下图所展示的红蓝点分开
在这里插入图片描述
怎么做呢,几行代码搞定:

from sklearn.linear_model import LogisticRegression   
#初始化模型 
clf_LR = LogisticRegression()     
#训练数据 
clf_LR.fit(features_train,label_train)    
#预测 
label pred_LR = clf_LR.predict(features_test)    
#评估模型 
acc = accuracy_score(pred_LR, label_test)     
得到结果:
0.93200000000000005

我们将结果绘制出来是这样的:

plot_pic(clf_LR, features_test, label_test)
在这里插入图片描述

就这么简单的实现了机器学习中逻辑回归分类算法。

3 安装使用

执行安装

pip install scikit-learn

导入模块
需要使用什么算法就import什么模块,如果不知道那个算法对应那个库,这就只能自己记住一些常用的,如果是不常用的,在需要的时候查阅官方文档就行了。

比如上面例子中,我们要用逻辑回归算法,那么就是,从sklearn的linear_model模块中导入LogisticRegression算法子模块。

from sklearn.linear_model import LogisticRegression

4 常用的模块和函数

scikit-learn有哪些模块呢,直接看图吧。
在这里插入图片描述
说明:
由图中,可以看到算法有四类,分类回归聚类降维
也就是我在上一篇文章中提到的四个类别。很多模型实际都覆盖了不同的应用类别。

  • 分类和回归是监督式学习,即每个数据对应一个 label。
  • 聚类 是非监督式学习,即没有 label。
  • 降维,相对比较特殊,是当数据集有很多很多属性的时候,可以通过 降维 算法把属性归纳起来。

常用的算法和模块对应关系
注:以下都是监督学习,无监督学习我们基本用不上,就不列举了
在这里插入图片描述

**注:**每个分类都可能对应了不只一个模型,这里只列举了最基本的那个模型,其他可能还有很多变种或扩展。

4、主要流程

下面从机器学习的流程我们来一步步看sklearn提供了什么的功能支持。

获取数据 -> 数据预处理 -> 训练和测试建模 -> 评估模型 -> 保存模型

第一步:获取数据

要进行数据分析,首先得有数据。sklearn提供了我们两种方法:

  • 直接导入sklearn小数据集做测试用。
  • 用sklearn提供的接口自己创建数据集。

1.导入sklearn自带数据集
在这里插入图片描述
使用方式:

from sklearn import datasets
iris = datasets.load_iris() # 导入数据集
X = iris.data # 获得其特征向量
y = iris.target # 获得样本label

2.创建数据集
使用方式:

from sklearn.datasets.samples_generator import make_classificationX, y = make_classification(n_samples=6, n_features=5, n_informative=2, n_redundant=2, n_classes=2, n_clusters_per_class=2, scale=1.0, random_state=20)#n_samples:指定样本数,n_features:指定特征数,
#n_classes:指定几分类,random_state:随机种子,使得随机状可重

更多内容参看官网文档
https://scikit-learn.org/stable/datasets/

说明:

在金融数据分析中,我们都是采用股票/期货等金融数据,有专门的数据获取渠道,上面这些通过sklearn获取数据的方式了解一下就行了。

第二步:数据预处理

数据预处理阶段是很重要的一环,只有预处理后的数据才能被模型或评估器所接受。数据的预处理主要包含这几个方面的工作:

  • 特征提取
  • 特征归一化
  • 特征标准化
  • 分割数据集

需要导入的模块

from sklearn import preprocessing

1.特征提取
我们获取的数据中很多数据往往有很多维度,但并不是所有的维度都是有用的,有意义的,所以我们要将对结果影响较小的维度舍去,保留对结果影响较大的维度。PCA(主成分分析)与LDA(线性评价分析)是特征提取的两种经典算法。

LDA用法举例

import sklearn.discriminant_analysis as sk_discriminant_analysis
lda = sk_discriminant_analysis.LinearDiscriminantAnalysis(n_components=2)
lda.fit(iris_X,iris_y)
reduced_X = lda.transform(iris_X) #reduced_X为降维后的数据
print('LDA:')
print ('LDA的数据中心点:',lda.means_) #中心点
print ('LDA做分类时的正确率:',lda.score(X_test, y_test)) #score是指分类的正确率
print ('LDA降维后特征空间的类中心:',lda.scalings_) #降维后特征空间的类中心

2.特征归一化
为了使得训练数据的标准化规则与测试数据的标准化规则同步,preprocessing中提供了很多Scaler:

data = [[0, 0], [0, 0], [1, 1], [1, 1]]
基于mean和std的标准化

scaler = preprocessing.StandardScaler().fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)

将每个特征值归一化到一个固定范围

scaler = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)
#feature_range: 定义归一化范围,注用()括起来

3.特征标准化
当你想要计算两个样本的相似度时必不可少的一个操作,就是正则化。其思想是:首先求出样本的p-范数,然后该样本的所有元素都要除以该范数,这样最终使得每个样本的范数都为1。

>>> X = [[ 1., -1.,  2.],
...      [ 2.,  0.,  0.],
...      [ 0.,  1., -1.]]
>>> X_normalized = preprocessing.normalize(X, norm='l2')>>> X_normalized                                      
array([[ 0.40..., -0.40...,  0.81...],[ 1.  ...,  0.  ...,  0.  ...],[ 0.  ...,  0.70..., -0.70...]])

4.分割数据集
在得到训练数据集时,通常我们经常会把训练数据集进一步拆分成训练集和验证集,这样有助于我们模型参数的选取。
作用:将数据集划分为 训练集和测试集
格式:train_test_split(*arrays, **options)

from sklearn.mode_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

第三步:训练和测试模型

定义模型
在这一步我们首先要分析自己数据的类型,搞清出你要用什么模型来做,然后我们就可以在sklearn中定义模型了。使用上几乎都是同一种模式,只是参数不同。

拟合模型
model.fit(X_train, y_train)

预测模型
model.predict(X_test)

前面例子中已经包含了,这儿再抄一遍。以逻辑回归为例子,如果是其他模型,直接替换相应的名称就可以了

#导入模型
from sklearn.linear_model import LogisticRegression    #从sklearn中引入逻辑回归算法;必背;#定义了逻辑回归的分类器
clf_LR = LogisticRegression()     #训练和学习
clf_LR.fit(features_train,label_train)     #预测测试集
pred_LR = clf_LR.predict(features_test)    #拿预测的测试集的label去跟真实的测试集的label去比较、打分
acc = accuracy_score(pred_LR, label_test)     得到结果:
0.93200000000000005

第四步:评估模型

model.predict(x_test) 返回测试样本的预测标签
model.score(predict,label_test) 根据预测值和真实值计算平分

为模型进行打分

model.score(data_X, data_y)  

score()对不同类型模型评价标准是不一样的。

  • 回归模型:使用“决定系数”评分(coefficient of Determination)
  • 分类模型:使用“准确率”评分(accuracy)

第五步:保存模型

最后,我们可以将我们训练好的model保存到本地,或者放到线上供用户使用,那么如何保存训练好的model呢?主要有下面两种方式:
1.读取pickle文件

import pickle#保存模型
with open('model.pickle', 'wb') as f:pickle.dump(model, f)#读取模型
with open('model.pickle', 'rb') as f:model = pickle.load(f)
model.predict(X_test)

2.使用joblib模块

from sklearn.externals import joblib#保存模型
joblib.dump(model, 'model.pickle')#载入模型
model = joblib.load('model.pickle')

至此,用sklearn进行机器学习的方法已经介绍完了,下一篇会进行实战应用

选择一种模型来对真实的股票数据进行涨跌预测

参考文档

官方例子
https://scikit-learn.org/stable/auto_examples/index.html
中文文档
http://sklearn.apachecn.org/#/

这篇关于机器学习很难,sklearn很简单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/594676

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核