Scikit-learn学习系列 | 1. sklearn的简要使用介绍与数据集获取

简介: Scikit-learn学习系列 | 1. sklearn的简要使用介绍与数据集获取

1. scikit-learn概述


在工程应用中,用python手写代码来从头实现一个算法的可能性非常低,这样不仅耗时耗力,还不一定能够写出构架清晰,稳定性强的模型。更多情况下,是分析采集到的数据,根据数据特征选择适合的算法,在工具包中调用算法,调整算法的参数,获取需要的信息,从而实现算法效率和效果之间的平衡。而sklearn,正是这样一个可以帮助我们高效实现算法应用的工具包。


1.1 技巧介绍

# 技巧1: 缩放处理
from sklearn import preprocessing
# feature_range: 设置缩放范围
scaler = preprocessing.MinMaxScaler(feature_range=(-1, 1)) 
scaler.fit(iris.data) 
iris.data[:5]
"""
输出:
array([[5.1, 3.5, 1.4, 0.2],
   [4.9, 3. , 1.4, 0.2],
   [4.7, 3.2, 1.3, 0.2],
   [4.6, 3.1, 1.5, 0.2],
   [5. , 3.6, 1.4, 0.2]])
"""
data = scaler.transform(iris.data)
data[:5]
"""
输出:
array([[-0.55555556,  0.25      , -0.86440678, -0.91666667],
       [-0.66666667, -0.16666667, -0.86440678, -0.91666667],
       [-0.77777778,  0.        , -0.89830508, -0.91666667],
       [-0.83333333, -0.08333333, -0.83050847, -0.91666667],
       [-0.61111111,  0.33333333, -0.86440678, -0.91666667]])
"""
# 技巧2:分类模型评分报告
from sklearn.metrics import classification_report
 # 分类模型评分报告
report = classification_report(target, clf.predict(data), target_names = iris.target_names)
print(report)
# 输出:
"""
         precision    recall  f1-score   support
      setosa       1.00      1.00      1.00        50
  versicolor       0.92      0.98      0.95        50
   virginica       0.98      0.92      0.95        50
    accuracy                           0.97       150
   macro avg       0.97      0.97      0.97       150
weighted avg       0.97      0.97      0.97       150  
"""
# 技巧3:交叉验证
from sklearn.model_selection import cross_val_score
# 采用5折交叉验证
scores = cross_val_score(clf, data, target,c v=5)


1.2 模型保存

# 方法1:使用pickle 
import pickle 
model_saved = pickle.dumps(model)        # 保存模型成字符串
model_loaded = pickle.loads(model_saved) # 从字符串加载模型
model_loaded.predict(data)
# 方法2:使用joblib
import joblib
joblib.dump(model, 'model_saved_joblib.pkl')           # 保存模型到文件
model_loaded = joblib.load('model_saved_joblib.pkl') # 加载模型
model_loaded.predict(data)


1.3 模型优化

优化模型的方法包括: 网格搜索法,随机搜索法,模型特定交叉验证,信息准则优化


1)网格搜索法 GridSearchCV


所谓网格:就是预先通过网格的方式给定每个超参数的可能数值,各种超参数可能的数值,组成了二维网格。网格搜索法在指定的超参数空间中对每一种可能的情况进行交叉验证评分并选出最好的超参数组合。使用网格搜索法或随机搜索法可以对Pipeline进行参数优化,也可以指定多个评估指标。


2)随机搜索法 (RandomizedSearchCV)


随机搜索法和网格搜索法作用类似,但是只在超参数空间中进行指定次数的不同采样。采样次数通过n_iter参数指定,通过调整其大小可以在效率和性能方面取得平衡。其采样方法调用ParameterSampler函数,采样空间必须用字典进行指定。网格搜索法只能在有限的超参数空间进行暴力搜索,但随机搜索法可以在无限的超参数空间进行随机搜索。


2. scikit-learn涵盖内容


四大问题以及算法分类 — 算法工程

分类问题相关算法:把输入数据集,按照指定的类型进行分类。

聚类问题相关算法:把输入数据集,让机器自动发现数据的类型,并进行分类。

回归问题相关算法:用一个特定的曲线拟合数据集中的数据特征。

降维问题相关算法:降低输入数据集的维度,使得复杂问题简化。


算法模型选择:对于特定的现实问题,选择合适的模型

模型初选:针对特定的数据集和要解决的问题,从Scikit-learn支持的众多的模型中初步选择一个模型。

模型训练:用输入数据对模型进行训练

模型评估:对训练后的模型进行评估

模型优化:对训练后的模型进行超参数优化

模型终选:比较各种模型和优化结果,选择最终的模型


数据的预处理 — 特征工程

在把数据送入到模型中进行训练前,需要对数据进行预处理

数据的获取:通过Scikit-learn提供的工具,从外部读取数据到内存,并按照期望的方式组织数据

数据预处理:对于读取的数据进行预处理,如过滤无效数据、对强化、变形等等

特征的提取:从数据中提取特征数据,这些特征数据作为模型的输入(而不是原始的数据)

特征的选择:在众多提取的特征中,根据需要选择一定的特征数据,用于最终模型的训练。


3. scikit-learn数据集获取


image.png

  • scikit-learn自带数据集介绍:

自带的小数据集:安装后,这些数据集一并安装,xxx.load_xxx()

在线下载的数据集:下载远程数据集

计算机生成的数据集:通过某种数学算法,生成数据集

svmlight/svm格式的数据集: 从文件冲去数据集

mldata.org: 在线下载由mldata.org提供的大型数据集


  • 计算机自动生成数据集:

make_blobs 可用于聚类和分类

make_classification 可用于分类

make_circles 可用于分类

make_moons 可用于分类

make_multilabel_classification 可用于多标签分类

make_regression 可用于回归


3.1 生成聚类数据:make_blobs

# 案例1:生成聚类数据:make_blobs
from sklearn.datasets import make_blobs  # 生成数据 make_blobs
# 生成数据集
# n_samples:样本总数
# centers:中心点坐标,与分类数一致
# n_features:分类数
# cluster_std:正态分布的标准方差
# random_state:随机种子,确保每次运行,生成的随机数是一样的
X, labels=make_blobs(n_samples=200,centers=[[1,1],[-1,-1],[1,-1]], n_features=2, cluster_std=0.3, random_state = 0)
# 可视化方法1:
# 通过pandas可视化数据,np.c_[X,labels]将特征数据与label结合成为一个表格
df = pd.DataFrame(np.c_[X,labels],columns = ['feature1','feature2','labels'])  # 生成DataFrame式的表格
# x = df['feature1']
# y = df['feature2']
# s: 设置透明度
# c: 设置每个样本的颜色,类别相同颜色相同
# alpha: 设置透明度
df.plot.scatter('feature1','feature2', s = 100, c = list(df['labels']), cmap = 'rainbow',colorbar = False, alpha = 0.8,title = 'dataset by make_blobs')
# 可视化方法2:
X, labels=make_blobs(n_samples=200,centers=[[1,1],[-1,-1],[1,-1]], n_features=2, cluster_std=0.3, random_state=42)
plt.scatter(X[:,0], X[:,1], c=labels, s=50, alpha=0.9)  # 直接生成散点图,比较简单但是样式少

image.png


3.2 生成分类数据:make_classification

# 案例2:生成分类数据:make_classification
from sklearn.datasets import make_classification
# n_samples:样本数
# n_features:特征数目
# n_classes:分类数目
# n_redundant:冗余数
X,labels=make_classification(n_samples=300, n_features=2, n_classes = 2, n_redundant=0, n_informative=2, 
                             random_state=0, n_clusters_per_class=2)
# 通过np.c_[X,labels]将特征数据与label结合成为一个表格
df = pd.DataFrame(np.c_[X, labels],columns = ['feature1','feature2','labels'])
# 将label从浮点型转化为整形,以下两行都可以
# df['labels'].astype(int)
df['labels'] = df['labels'].astype('i2')   
# 可视化展示
df.plot.scatter('feature1','feature2', s = 100, c = list(df['labels']),cmap = 'rainbow',colorbar = False,
                alpha = 0.8,title = 'dataset by make_classification')

image.png


3.3 生成环形数据:make_circles

# 案例3:生成环形数据:make_circles
from sklearn.datasets import make_circles
# noise: 表示数据的交互程度,数值越到表示两个数据融合得比较充分
# factor: 数据向外的扩张系数,数值越高表示越发散
X,labels=make_circles(n_samples=200,noise=0.05,factor=0.3,random_state=42)
# 通过np.c_[X,labels]将特征数据与label结合成为一个表格
df = pd.DataFrame(np.c_[X,labels],columns = ['feature1','feature2','labels'])
df.plot.scatter('feature1','feature2', s = 100, c = list(df['labels']),cmap = 'rainbow',colorbar = False, 
                alpha = 0.8,title = 'dataset by make_circles')

image.png


3.4 生成回归数据:make_regression

# 案例4: 生成回归数据:make_regression
from sklearn.datasets import make_regression
# 生成数据集
# n_samples:样本个数
# n_features:输入数据的维度,这里是1维x轴
# n_targets:输出数据的维度,这里是1为y轴
# bias:数据偏置大小
# noise:叠加的噪声大小
# random_state:随机种子
X,Y,coef = make_regression(n_samples=100, n_features=1, n_informative=1, n_targets=1, bias=5, effective_rank=None, 
                           tail_strength= 0, noise= 10, shuffle=True, coef=True, random_state=42)
# 通过np.c_[X,labels]将特征数据与label结合成为一个表格
df = pd.DataFrame(np.c_[X ,Y],columns = ['X','y'])
# 通过xlim与ylim来设置表格的范围
df.plot.scatter('X','y', s = 100, c = "blue", cmap = 'rainbow',colorbar = False, 
                alpha = 0.8,title = 'dataset by make_regression', xlim=(-3, 3), ylim=(-150, 150))

image.png


3.5 导入外部的数据集

import numpy as np
import pandas as pd
# 外部文件名,可以是excel、csv文件,可以是txt文件
df_demo = pd.read_csv('demo.xlsx', encoding='utf-8', names=[['feature1', 'feature2']])
df_demo = pd.read_excel('demo.xlsx', sheet_name=1)   # 无需指定编码格式,全部都能读取


参考资料:

博主“文火冰糖的硅基工坊”的专栏——机器学习与scikit-learn


目录
相关文章
|
17天前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
153 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
19天前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
34 1
|
3天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
12 1
|
14天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
15 1
|
14天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
16天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
42 2
|
16天前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
38 1
|
17天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
241 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
14天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从入门到精通Python,打好 LLM大模型的基础
Python学习圣经:从0到1精通Python,打好AI基础
|
16天前
|
机器学习/深度学习 缓存 Linux
python环境学习:pip介绍,pip 和 conda的区别和联系。哪个更好使用?pip创建虚拟环境并解释venv模块,pip的常用命令,conda的常用命令。
本文介绍了Python的包管理工具pip和环境管理器conda的区别与联系。pip主要用于安装和管理Python包,而conda不仅管理Python包,还能管理其他语言的包,并提供强大的环境管理功能。文章还讨论了pip创建虚拟环境的方法,以及pip和conda的常用命令。作者推荐使用conda安装科学计算和数据分析包,而pip则用于安装无法通过conda获取的包。
36 0