在职位招聘数据处理中使用Loess回归曲线以及分箱、回归、聚类方法 检查离群点及光滑数据【数据挖掘机器学习】

news2025/1/13 8:02:38

文章目录

  • 一.需求分析
  • 二.使用局部回归(Loess)曲线(增加一条光滑曲线到散布图)方法处理数据
  • 三.使用分箱、回归、聚类方法 检查离群点及光滑数据;

一.需求分析

本文主题:使用局部回归(Loess)曲线(增加一条光滑曲线到散布图)方法处理数据以及使用分箱、回归、聚类方法 检查离群点及光滑数据;

前文回顾,我们上篇文章写了招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理。之前的文章我们已经对爬取的数据做了清洗处理,然后又对其数据做了一个薪资数据的倾斜情况以及盒图离群点的探究。

我们到了现在对机器学习已经是做了很多的工作了。

我们这次的任务需求是:

使用局部回归(Loess)曲线(增加一条光滑曲线到散布图)方法处理数据 使用分箱、回归、聚类方法 检查离群点及光滑数据;

二.使用局部回归(Loess)曲线(增加一条光滑曲线到散布图)方法处理数据

Loess:

局部加权回归是一种非参数学习算法,它使我们不必太担心自变量的最高阶项的选择 我们知道,对于普通线性回归算法,我们希望通过以下方式预测x点的y值:

image-20221216214646725

我们现实生活中的许多数据可能无法用线性模型来描述。这仍然是一个房价问题。显然,直线不能很好地拟合所有数据点,误差非常大,但类似于二次函数的曲线可以很好地吻合。为了解决为非线性模型建立线性模型的问题,当我们预测一个点的值时,我们选择接近该点的点,而不是所有点进行线性回归。在此基础上,提出了一种局部加权线性回归算法。在这个算法中,其他人越接近一个点,权重越大,他们对回归系数的贡献越大。

公式为:

image-20221216214747704

1.第一步都是老规矩了,先读取我们的目标文件,然后,我们使用关键词“java”对数据进行筛选,循环筛选过程中将职位名,薪资需要的关键字放到列表里面,然后存入字典里,经过pandas的处理:

事前准备:将需要的包引入:

import re
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl

指定默认字体:解决plot不能显示中文问题,解决保存图像是负号’-'显示为方块的问题

mpl.rcParams['font.sans-serif'] = ['STZhongsong']    
mpl.rcParams['axes.unicode_minus'] = False           

使用关键词“java”对数据进行筛选:

xingzhi={}
zhiwei = []
xin1 = []
xin2 =[]
for i in range(len(data)):
    if "java" in data.iloc[i]['职位名']:
        a = re.findall("\d+.?\d*", data.iloc[i]['薪资'])
        # print(data.iloc[i]['职位名'])
        zhiwei.append(data.iloc[i]['职位名'])
        xin1.append(int(a[0]))
        xin2.append(int(a[1]))
xingzhi={"职位名":zhiwei,'最低薪资':xin1,'最高薪资':xin2}
df = pd.DataFrame(xingzhi)
java1=xin1
java2=xin2

2.使用lowess函数,先对数据集进行一个排序,然后传入lowess函数进行一个计算,得到的数据进行一个绘图:

import numpy as np
import statsmodels.api as sm
lowess = sm.nonparametric.lowess
import pylab as pl
​
yest = lowess(np.sort(java1),np.sort(java2), frac=0.01)[:,0]
print(yest)
print(java1.sort)
pl.clf()
plt.scatter(java1,java2, c="red", marker='o', label='java')
pl.plot(np.sort(java1), yest, label='y pred')
plt.xlabel('Java岗位薪资下限')
plt.ylabel('Java岗位薪资上限')
pl.legend()
plt.show()
  1. 效果图

Java岗位薪资的的下限和上限的局部回归(Loess)曲线:

image-20221216213919739

Go岗位薪资的的下限和上限的局部回归(Loess)曲线

image-20221216214018558

python岗位薪资的的下限和上限的局部回归(Loess)曲线

image-20221216214056807

三.使用分箱、回归、聚类方法 检查离群点及光滑数据;

为什么要分箱:

1.在盒分裂离散化之后,变量的容忍度增强,异常值对模型的影响将很小。例如,平均消耗量为1000,当一个样本的消耗量为10000时,可以忽略对模型的干扰 2.它具有很强的稳定性。

例如,一个样本现在是22岁,明年是23岁,一个盒子一个盒子的划分在[20,30]的范围内。虽然样本的年龄发生了变化,但仍在原始的盒划分范围内 3.离散化后,变量的值减小,可以减少模型的过拟合;例如,盒子分割前的值为1-10。如果每个值为1个盒子,则有10个盒子,模型将过度学习;如果将模型分为四个框,则模型不会过度学习所有变量的信息 4.盒离散化可以将缺失的值作为一个独立的盒,并将缺失的信息集成到模型中 5.变量装箱也是数据标准化处理的一种方式,它可以将不同尺度的所有变量转换为同一尺度,避免模型给大尺度变量太多权重

1.与上文一样,我们使用关键词“java”对数据进行筛选,循环筛选过程中将职位名,薪资需要的关键字放到列表里面,然后存入字典里,经过pandas的处理: 将上限和下限分别处理:

xingzhi={}
zhiwei = []
xin1 = []
xin2 =[]
for i in range(len(data)):
    if "java" in data.iloc[i]['职位名']:
        a = re.findall("\d+.?\d*", data.iloc[i]['薪资'])
        # print(data.iloc[i]['职位名'])
        zhiwei.append(data.iloc[i]['职位名'])
        xin1.append(int(a[0]))
        xin2.append(int(a[1]))
xingzhi={"职位名":zhiwei,'最低薪资':xin1,'最高薪资':xin2}
df = pd.DataFrame(xingzhi)
java1=xin1
java2=xin2

2.引入分箱、回归、聚类方法的一些模块包:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import KBinsDiscretizer
from sklearn.tree import DecisionTreeRegressor

3.构建数据集

X = np.reshape(java1,(-1, 1))
y = np.reshape(java2,(-1, 1))
X = (np.sort(X))
y = (np.sort(y))

4.用KBinsDiscretizer转换数据集

enc = KBinsDiscretizer(n_bins=50, encode='ordinal', strategy='uniform')
X_binned = enc.fit_transform(X)

‘ordinal’:返回编码为整数值的 bin 标识符。

5.用原始数据集进行预测

fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True, figsize=(10, 4))
line = X
reg1 = LinearRegression().fit(X, y)
ax1.plot(line, reg1.predict(line), linewidth=2, color='green',
         label="线性回归")
print(line)
print("reg.predict(line)::",reg1.predict(line))
reg = DecisionTreeRegressor().fit(X, y)
ax1.plot(X, reg.predict(y), linewidth=2, color='red',
         label="决策树")
ax1.plot(X, y, 'o', c='k')
ax1.legend(loc="best")
ax1.set_ylabel("Java薪资上限")
ax1.set_xlabel("Java薪资下限")
ax1.set_title("没有分箱前")

6.用转换后的数据进行预测

line_binned = enc.transform(X)
# print("line::",line)
# print("line_binned::",line_binned)
reg = LinearRegression().fit(X_binned, y)
a=reg.predict(line_binned)
ax2.plot(line,reg.predict(line_binned), linewidth=2, color='green',
          label='线性回归')
print(line)
print(a[a[:, 0].argsort()])
print(reg.predict(line_binned))
print(type(a))
reg = DecisionTreeRegressor(min_samples_split=3,
                            random_state=0).fit(X_binned, y)
ax2.plot(np.sort(java1), np.sort(reg.predict(line_binned)), linewidth=2, color='red',
         linestyle='-', label='决策树')
ax2.plot(X, y, 'o', c='k')
ax2.vlines(enc.bin_edges_[0], *plt.gca().get_ylim(), linewidth=1, alpha=.2)
ax2.legend(loc="best")
ax2.set_xlabel("Java薪资下限")
ax2.set_title("50个为一组分箱后")
plt.tight_layout()
plt.show()

7.效果图:

Java岗位薪资的的下限和上限的分箱、回归、聚类结果图

image-20221216214332551

Python岗位薪资的的下限和上限的分箱、回归、聚类结果图

image-20221216214354077

Go岗位薪资的的下限和上限的分箱、回归、聚类结果图

image-20221216214417389

本次总结:

对python数据的操作又有了很高程度的提升,对数据处理工具kettle的使用也加深了熟练度,对数据预处理技术也有了很深的理解和运用,后面我对之前机器学习的一些算法也进行了较为深入的复习和实战,后面我又帮助了小组的成员解决他们遇到的问题,对数据可视化也起到了复习的作用,而且我全程还使用gitee来管理项目代码,虽然小组成员对git操作较为陌生,但是随着大家项目的推进,大家也是耳濡目染了一些git的基本操作。 本次让我有了一定对数据处理和机器学习以至于对后面深度学习的一些兴趣,同时也认识到了这个方向的难度,和自己掌握的内容不过是冰山一角,后续我会对其进行一个模块化的深入学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter(十九):nmon性能系统监控工具

一、Nmon介绍 Nmon得名于 Nigel 的监控器,是IBM的员工 Nigel Griffiths 为 AIX 和 Linux 系统开发的,使用 Nmon 可以很轻松的监控系统的CPU、内存、网络、硬盘、文件系统、NFS、高耗进程、资源和 IBM Power 系统的微分区的信息 Nmon是一款计算机性能系…

【JavaEE】HTTP + HTTPS(Part2 )

努力经营当下,直至未来明朗! 文章目录【HTTP响应详解】1. 认识状态码2.认识响应“报头”header3.认识响应“正文”body【通过 Java socket 构造 HTTP 请求】三、HTTPS四、Tomcat:http服务器THINK一个人最大的痛苦来源于对自己无能的愤怒。 【…

Pycharm SQL 警告:SQL dialect is not configured.

Pycharm SQL 警告:SQL dialect is not configured. 文章目录Pycharm SQL 警告:SQL dialect is not configured.Unable to resolve symbol XXX在我们编写python代码的时候,不免会在代码里面写入自己写的sql语句,因为很少有orm框架能…

JVM Java内存模型(JMM)

很多人将Java内存结构与Java内存模型傻傻分不清,Java内存模型是Java memory model(JMM)的意思。简单地说,JMM定义了一套在多线程的环境下读写共享数据(比如成员变量、数组)时,对数据的可见性、有…

浪潮开务数据库陈磊:布局数字能源,创新助力 “双碳”

​当前,碳中和、碳达峰无疑是国际社会最关注的热点之一。2021 年两会上,我国提出:二氧化碳排放力争于 2030 年前达到峰值,努力争取 2060 年前实现碳中和。“双碳” 目标的提出将推动产业转型升级,提高经济增长质量&…

【LeetCode题目详解】(二)206.反转链表、876.链表的中间结点

目录 一、力扣第206题:反转链表 1.思路一 2.思路二 二、力扣第876题:链表的中间结点 1.思路一 2.思路二 总结 一、力扣第206题:反转链表 题目链接:206. 反转链表 - 力扣(Leetcode) 题目描述&#xff1…

gitee学习笔记(使用命令行上传、拉取资料)

1、创建一个仓库(比如命名为firstgit) 2、在文件夹中准备好要上传的资料 3、单击鼠标右键,打开Git Bash Here 进行命令行操作(当然,前提是需要安装git客户端,可去官网安装) 4、上传文件 ①git init //文件初始…

【mybatis-plus】自定义多数据源,动态切换数据源事务失效问题

背景 做了一个和navicat一样的工具,web版工具,然后数据库链接信息都是存在一个主数据库表的里,所以这里涉及到了动态切换数据源,以及一些事务等。今天说下多数据源切换时,事务失效。 目录 一、常见的事务失效 Transac…

大数据必学Java基础(一百一十二):开发案例之登录验证

文章目录 开发案例之登录验证 一、准备实体类 二、准备一些页面和静态资源

Spring boot day1

Maven 进阶 spring boot 框架 spring boot 相比于SSM框架的优缺点 优点: 创建独立的sping应用程序内嵌的tomcat,无需部署war文件简化的maven配置自动配置spring提供生产就绪型功能,如指标,健康检查和外部配置 特性:…

3.1 卷积神经网络基础

文章目录计算机视觉的发展历程卷积神经网络卷积(Convolution)卷积计算填充(padding)步幅(stride)感受野(Receptive Field)多输入通道、多输出通道和批量操作飞桨卷积API介绍卷积算子…

碰焊机触摸屏软件开发

1 软件需求 人机界面为MCGS 10寸触摸屏1062KW,接口为RS232/RS484/以太网,供电电源为24V。机触摸屏的功能为机器人的基本状态信息显示和对机器人的控制及参数给定。 目前设计的小车分成两栏共10格,需要将对应的触摸屏大致分成相应的10大格&a…

【嵌入式】AI落地部署技能

针对不同平台对生成的模型进行转换,也就是俗称的parse、convert,即前端解释器针对转化后的模型进行优化在特定的平台(嵌入端或者服务端)成功运行已经转化好的模型在模型可以运行的基础上,保证模型的速度、精度和稳定性用C、cuda写算子(预处理…

AWS-Eventbridge-事件总线实践

aws eventbridge 功能主要使用场景为,针对账号发生各种事件,发生告警,可以发送sns告警,也可以配置发送到当前区域或者其他账号当前区域的事件总线上汇总,再做下一步规划eventbridge 事件总线类似与整个事件的一个目录集…

机器学习——03决策树算法

机器学习——03决策树算法 参考资料 AIlearningMachine-Learning-in-Action庞善民.西安交通大学机器学习导论2022春PPT 具体算法的原理步骤请参考本人的另一篇博文:[机器学习导论]—— 第四课——决策树 一、信息熵与信息增益 🔥信息熵 信息熵使信息…

中小企业OA系统的设计与实现

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 模块划分:通知类型模块、通知信息模块、部门模块、员工模块、考勤模块、工资模块、奖惩类型、奖惩信息、请假…

USACO开赛!这份参赛指引必看!

美国信息学奥赛USACO 2022 – 2023赛季首场比赛于明日(12月16日)开始!这份参赛指引,一定要认真看噢~ 第一步:打开 USACO 官网:http://www.usaco.org/,点击【注册新账号】,开始注册账…

宽凳科技完成超亿元B1轮融资 率先突破高精地图量产落地

近日,国内领先的高精地图及其智能应用综合解决方案服务商宽凳科技宣布完成B1轮超亿元融资。本轮融资由聚焦于新能源汽车产业链投资及新兴技术产业投资的紫峰资本与信益资本联合领投,崇业投资跟投,同时本轮资本引入了德清政府战略投资&#xf…

WebDAV之葫芦儿·派盘+Xplore

Xplore 支持WebDAV方式连接葫芦儿派盘。 手机文件太多、太乱,本地目录中找不想要的文件,怎么办?推荐使用Xplore将手机中的文件以不同的文件方式罗列出来,并展示给用户。文件管理器以图片、音乐、视频、文档、压缩包及安装包等类型进行分类,使手机中的文件一目了然的分列…

离线地图开发包

相关教程: 1、如何搭建离线地图开发环境 视频教程 2、下载离线地图数据(金字塔瓦片数据) 视频教程 3、下载离线地图地形数据库(实现地表高低起伏) 4、添加离线地图数据到本地服务器 (含3D) 视频…