python 数据挖掘算法的过程详解

目录
  • 1、首先简述数据挖掘的过程
    • 第一步:数据选择
    • 第二步:数据预处理
    • 第三步:特征值数据转换
    • 第四步:模型训练
    • 第五步:测试模型+效果评估
    • 第六步:模型使用
    • 第七步:解释与评价
  • 2、主要的算法模型讲解——基于sklearn
  • 3、sklearn自带方法joblib来进行保存训练好的模型

1、首先简述数据挖掘的过程

第一步:数据选择

可以通过业务原始数据、公开的数据集、也可通过爬虫的方式获取。

第二步: 数据预处理

数据极可能有噪音,不完整等缺陷,需要对数据进行数据标准化,方法有min-max 标准化,z-score 标准化,修正的标准z-score。

第三步:特征值数据转换

将数据提取特征使这些数据符合特定数据挖掘算法的分析模型。数据模型有很多,等下详细讲解。

第四步:模型训练

选择好的数据挖掘算法对数据进行训练

第五步:测试模型+效果评估

有两种主流方法:

十折交叉验证:将数据集随机分割成十个等份,每次用9份数据做训练集,1份数据做测试集,如此迭代10次。十折交叉验证的关键在于较平均地分为10份。

N折交叉验证又称为留一法:用几乎所有的数据进行训练,然后留一个数据进行测试,并迭代每一数据测试。留一法的优点是:确定性。

第六步:模型使用

使用训练好的模型对数据进行预测。

第七步:解释与评价

对数据挖掘后的信息加以分析解释,并应用于实际的工作领域。

2、主要的算法模型讲解 ——基于sklearn

1)线性回归:希望所有点都落在直线上,所有点离直线的距离最近。首先假设好y=ax+b中a和b的值,然后计算每个数据点到这条直线上的距离总和,目的是要使这个总和最小!

from sklearn.linear_model import LinearRegression
# 定义线性回归模型
model = LinearRegression(fit_intercept=True, normalize=False,
    copy_X=True, n_jobs=1)
"""
参数
---
    fit_intercept:是否计算截距。False-模型没有截距
    normalize: 当fit_intercept设置为False时,该参数将被忽略。 如果为真,则回归前的回归系数X将通过减去平均值并除以l2-范数而归一化。
     n_jobs:指定线程数
"""

2)逻辑回归:二分算法,用于两分类问题。需要预测函数的“大概形式”, 比如是线性还是非线性的。

上面有提到,该数据集需要一个线性的边界。 不同数据需要不同的边界。

from sklearn.linear_model import LogisticRegression
# 定义逻辑回归模型
model = LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0,
    fit_intercept=True, intercept_scaling=1, class_weight=None,
    random_state=None, solver='liblinear', max_iter=100, multi_class='ovr',
    verbose=0, warm_start=False, n_jobs=1)

"""参数
---
    penalty:使用指定正则化项(默认:l2)
    dual: n_samples > n_features取False(默认)
    C:正则化强度的反,值越小正则化强度越大
    n_jobs: 指定线程数
    random_state:随机数生成器
    fit_intercept: 是否需要常量
"""

3)朴素贝叶斯算法NB:用于判断某件事的发生概率,我就曾用此算法做过舆情分类器。将一些语句变为01二维矩阵,计算词语的出现频率,从而判断语句的情感色彩是怎样的。

效率很高,但存在一定的错误概率

from sklearn import naive_bayes
model = naive_bayes.GaussianNB() # 高斯贝叶斯
model = naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
model = naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
"""
文本分类问题常用MultinomialNB
参数
---
    alpha:平滑参数
    fit_prior:是否要学习类的先验概率;false-使用统一的先验概率
    class_prior: 是否指定类的先验概率;若指定则不能根据参数调整
    binarize: 二值化的阈值,若为None,则假设输入由二进制向量组成
"""

4)决策树DT:类似流程图的树结构,它使用分支方法来说明决策的每个可能结果。树中的每个节点代表对特定变量的测试 - 每个分支都是该测试的结果。

from sklearn import tree
model = tree.DecisionTreeClassifier(criterion='gini', max_depth=None,
    min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
    max_features=None, random_state=None, max_leaf_nodes=None,
    min_impurity_decrease=0.0, min_impurity_split=None,
     class_weight=None, presort=False)
"""参数
---
    criterion :特征选择准则gini/entropy
    max_depth:树的最大深度,None-尽量下分
    min_samples_split:分裂内部节点,所需要的最小样本树
    min_samples_leaf:叶子节点所需要的最小样本数
    max_features: 寻找最优分割点时的最大特征数
    max_leaf_nodes:优先增长到最大叶子节点数
    min_impurity_decrease:如果这种分离导致杂质的减少大于或等于这个值,则节点将被拆分。
"""

5)支持向量机SVM:就是判断线性可分不可分,能不能用直线分割两类数据!理论可以推广到三维,甚至思维以上的特征空间。三维使用平面来分隔数据,四维和四维以上因为人类 无法直观的感知出来,所以画不出来,但是能分隔数据,存在这样的平面叫做超平面。

from sklearn.svm import SVC
model = SVC(C=1.0, kernel='rbf', gamma='auto')
"""参数
---
    C:误差项的惩罚参数C
    gamma: 核相关系数。浮点数,If gamma is ‘auto' then 1/n_features will be used instead.
"""

6)k近邻算法KNN:采用测量不同特征值之间距离的方法对数据进行分类的一个算法。

给定一个样本的集合,这里称为训练集,并且样本中每个数据都包含标签。对于新输入的一个不包含标签的数据,通过计算这个新的数据与每一个样本之间的距离,选取前k个,通常k小于20,以k个剧里最近的数据的标签中出现次数最多的标签作为该新加入的数据标签。

K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。(这就类似于现实生活中少数服从多数的思想)根据这个说法,咱们来看下引自维基百科上的一幅图:

如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。

如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。

from sklearn import neighbors
#定义kNN分类模型
model = neighbors.KNeighborsClassifier(n_neighbors=5, n_jobs=1) # 分类
model = neighbors.KNeighborsRegressor(n_neighbors=5, n_jobs=1) # 回归
"""参数
---
    n_neighbors: 使用邻居的数目
    n_jobs:并行任务数
"""

7)K-均值聚类(K-means):

  • 定义目标聚类数K,例如,k=3
  • 随机初始化的 k 个聚类中心(controids)
  • 计算每个数据点到K个聚类中心的Euclidean Distance,然后将数据点分到Euclidean Distance最小的对应类聚中心的那类
  • 针对每个类别,重新计算它的聚类中心;
  • 重复上面 3-4 两步操作,直到达到某个中止条件(迭代次数、最小误差变化等)

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.DataFrame({"x": [25, 34, 22, 27, 33, 33, 31, 22, 35, 34, 67, 54, 57, 43, 50, 57, 59, 52, 65, 47, 49, 48, 35, 33, 44, 45, 38, 43, 51, 46],
                   "y": [79, 51, 53, 78, 59, 74, 73, 57, 69, 75, 51, 32, 40, 47, 53, 36, 35, 59, 59, 50, 25, 20, 14, 12, 20, 5,  29, 27, 8,  7]})
kmeans = KMeans(n_clusters=3).fit(df)
centroids = kmeans.cluster_centers_
# 打印类聚中心
print(type(centroids), centroids)
# 可视化类聚结果
fig, ax = plt.subplots()
ax.scatter(df['x'],df['y'],c=kmeans.labels_.astype(float),s=50, alpha=0.5)
ax.scatter(centroids[:, 0], centroids[:, 1], c='red', s=50)
plt.show()

和KNN所不同,K-均值聚类属于无监督学习。

监督学习知道从对象(数据)中学习什么,而无监督学习无需知道所要搜寻的目标,它是根据算法得到数据的共同特征。比如用分类和聚类来说,分类事先就知道所要得到的类别,而聚类则不一样,只是以相似度为基础,将对象分得不同的簇。

ps):我们在机器学习中一直会遇到两种问题,一种是回归问题,一种是分类问题。我们从字面上理解,很容易知道分类问题其实是将我们现有的数据分成若干类,然后对于新的数据,我们根据所分得类而进行划分;而回归问题是将现有数据拟合成一条函数,根据所拟合的函数来预测新的数据。 这两者的区别就在于输出变量的类型。回归是定量输出,或者说是预测连续变量;分类问题书定量输出,预测离散变量。Po一张我在知乎上看到的一张图片,解释的很好:

3、sklearn自带方法joblib来进行保存训练好的模型

from sklearn.externals import joblib

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

参考链接:

https://juejin.cn/post/6961934412518785054

https://juejin.cn/post/6844903513504530446

机器学习之逻辑回归(纯python实现) - 掘金 (juejin.cn)

机器学习笔记5-支持向量机1 - 掘金 (juejin.cn)

到此这篇关于python 数据挖掘算法的文章就介绍到这了,更多相关python 数据挖掘算法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 数据挖掘之Apriori算法详解和Python实现代码分享

    关联规则挖掘(Association rule mining)是数据挖掘中最活跃的研究方法之一,可以用来发现事情之间的联系,最早是为了发现超市交易数据库中不同的商品之间的关系.(啤酒与尿布) 基本概念 1.支持度的定义:support(X-->Y) = |X交Y|/N=集合X与集合Y中的项在一条记录中同时出现的次数/数据记录的个数.例如:support({啤酒}-->{尿布}) = 啤酒和尿布同时出现的次数/数据记录数 = 3/5=60%. 2.自信度的定义:confidence(X-->

  • python数据挖掘需要学的内容

    1.Pandas库的操作 Panda是数据分析特别重要的一个库,我们要掌握以下三点: · pandas 分组计算; · pandas 索引与多重索引; 索引比较难,但是却是非常重要的 · pandas 多表操作与数据透视表 2.numpy数值计算 numpy数据计算主要应用是在数据挖掘,对于以后的机器学习,深度学习,这也是一个必须掌握的库,我们要掌握以下内容: · Numpy array理解: · 数组索引操作: · 数组计算: · Broadcasting(线性代数里面的知识) 3.数据可视化

  • python数据挖掘使用Evidently创建机器学习模型仪表板

    目录 1.安装包 2.导入所需的库 3.加载数据集 4.创建模型 5.创建仪表板 6.可用报告类型 1)数据漂移 2)数值目标漂移 3)分类目标漂移 4)回归模型性能 5)分类模型性能 6)概率分类模型性能 解释机器学习模型是一个困难的过程,因为通常大多数模型都是一个黑匣子,我们不知道模型内部发生了什么.创建不同类型的可视化有助于理解模型是如何执行的,但是很少有库可以用来解释模型是如何工作的. Evidently 是一个开源 Python 库,用于创建交互式可视化报告.仪表板和 JSON 配置文

  • python学习与数据挖掘应知应会的十大终端命令

    目录 1.wget 2.head 3.tail 4.wc 5.grep 6.cat 7.find 8.sort 9.nano 10.Variables IT界的每个人都应该知道终端(Terminal)的基本知识,数据科学家也不例外.有时,终端是你的全部,尤其是在将模型和数据管道部署到远程机器时. 让我们开始吧! 1.wget wget实用程序用于从远程服务器下载文件.你可以用它来下载数据集,只要你知道网址,可以使用wget命令下载它,我以如下url为例: https://raw.githubus

  • python适合做数据挖掘吗

    Python语言的崛起让大家对web.爬虫.数据分析.数据挖掘等十分感兴趣.数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是数据挖掘.所谓数据挖掘就是指从数据库的大量数据中揭示出隐含的.先前未知的并有潜在价值的信息的非平凡过程. 数据挖掘基于人工智能.机器学习.模式识别.统计学.数据库.可视化技术等,高度自动化地分析企业的数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,做出正确的决策.那么当今社会,数据挖掘就业前景可观吗?掌握数据挖掘的技术到底能不

  • python 数据挖掘算法的过程详解

    目录 1.首先简述数据挖掘的过程 第一步:数据选择 第二步:数据预处理 第三步:特征值数据转换 第四步:模型训练 第五步:测试模型+效果评估 第六步:模型使用 第七步:解释与评价 2.主要的算法模型讲解——基于sklearn 3.sklearn自带方法joblib来进行保存训练好的模型 1.首先简述数据挖掘的过程 第一步:数据选择 可以通过业务原始数据.公开的数据集.也可通过爬虫的方式获取. 第二步: 数据预处理 数据极可能有噪音,不完整等缺陷,需要对数据进行数据标准化,方法有min-max 标

  • Python读取YAML文件过程详解

    这篇文章主要介绍了Python读取YAML文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 YAML语法 学习手册 Python读取方法: import yaml with open('demo1.yaml', 'r', encoding='utf-8') as f: file_content = f.read() content = yaml.load(file_content, yaml.FullLoader) print(con

  • Python守护进程实现过程详解

    这篇文章主要介绍了Python守护进程实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出.如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性.即在线程开始(thread.start())之前,调用setDeamon()函数,设定线程的daemon标志.(thread.setDaemon(True))就

  • Python八皇后问题解答过程详解

    最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的时候碰到的.八皇后问题是说要在一个棋盘上放置8个皇后,但是不能发生战争,皇后们都小心眼,都爱争风吃醋,如果有人和自己在一条线上(水平.垂直.对角线)就会引发撕13大战,所以我们就是要妥当的安排8位娘娘,以保后宫太平. 言归正传,首先,我们得想好解决方案怎么表示,这种事首先想到列表,当然规模小的话用元

  • 如何用Python破解wifi密码过程详解

    前言 Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便.wifi跟我们的生活息息相关,无处不在.今天从WiFi连接的原理,再结合代码为大家详细的出一期关于Python破译wifi密码的Python学习教程! 01.如何连接wifi 首先我们的电脑是如何连接wifi的呢?就拿我们的笔记本电脑来说,我们的笔记本电脑都有无线网卡,如下图所示: 当我们连接WiFi时,无线网卡会自动帮助我们扫描附近的WiFi信号,并且会返回WiFi信号的一

  • 新手如何发布Python项目开源包过程详解

    本文假设你在 GitHub 上已经有一个想要打包和发布的项目. 第 0 步:获取项目许可证 在做其他事之前,由于你的项目要开源,因此应该有一个许可证.获取哪种许可证取决于项目包的使用方式.开源项目中一些常见许可证有 MIT 或 BSD. 要在项目中添加许可证,只需参照以下链接中的步骤,将 LICENSE 文件添加到项目库中的根目录即可:  https://help.github.com/en/articles/adding-a-license-to-a-repository 第 1 步:让你的代

  • python解析yaml文件过程详解

    YAML语法规则: http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/ 下载PyYAML: http://www.yaml.org/ 解压安装: python setup.py install 1.新建test.yaml文件,内容如下: name: Tom Smith age: 37 spouse: name: Jane Smith age: 25 children: - name: Jimmy Smith age: 15 - nam

  • Python 变量的创建过程详解

    一.变量创建过程 首先,当我们定义了一个变量name = 'Kwan'的时候,在内存中其实是做了这样一件事: 程序开辟了一块内存空间,将'Kwan'存储进去,再让变量名name指向'Kwan'所在的内存地址.如下图所示: 我们可以通过id()方法查看这个变量在内存中的地址. name = 'Kwan' print(id(name)) 二.变量的修改 一般我们认为修改一个变量就是用新值把就旧值覆盖掉,可Python真是这么实现的么? name = 'Kwan' print(id(name)) na

  • Python缓存技术实现过程详解

    一段非常简单代码 普通调用方式 def console1(a, b): print("进入函数") return (a, b) print(console1(3, 'a')) print(console1(2, 'b')) print(console1(3.0, 'a')) 很简单的一段代码,传入两个参数.然后打印输出.输出结果 进入函数 (3, 'a') 进入函数 (2, 'b') 进入函数 (3.0, 'a') 使用某个装饰器后 接下来我们引入functools模块的lru_cac

  • Python接口测试get请求过程详解

    python 做借口测试用到的是requests模块,首先要导入requests库,pip install requests 1.get直接请求方式 以豆瓣网为例: url = 'https://read.douban.com/' respose = requests.get(url=url) # status_code 为返回的状态码 print(respose.status_code) # text为返回的数据 print(respose.text) 请求结果:返回状态码为200,表明请求的

随机推荐