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


目录
相关文章
|
18天前
|
机器学习/深度学习 算法 数据挖掘
|
21天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
1天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
7 0
|
28天前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。
|
28天前
|
数据采集 数据可视化 Ruby
GitHub星标破万!Python学习教程(超详细),真的太强了!
Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。 Python 的设计哲学之一就是简单易学,体现在两个方面: 1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。 2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。
|
1月前
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
18 3
|
1月前
|
数据可视化 数据挖掘 索引
【python】Python马铃薯批发市场交易价格数据分析可视化(源码+数据集)【独一无二】
【python】Python马铃薯批发市场交易价格数据分析可视化(源码+数据集)【独一无二】
|
22天前
|
存储 JSON 测试技术
Python中最值得学习的第三方JSON库
Python中最值得学习的第三方JSON库
|
22天前
|
机器学习/深度学习 运维 数据挖掘
scikit-learn 1.0 版本重要新特性一览
scikit-learn 1.0 版本重要新特性一览
|
23天前
|
Python
python 随机划分图片数据集以及移动标注
这篇文章提供了一个Python脚本,用于随机划分图片数据集为训练集和测试集,并将对应的标注文件移动到相应的子文件夹中,以减少训练使用的数据量。