机器学习(数据准备和特征工程)

目录

原理:

1,处理缺省值的三种方法?

2,详细解释一种异常值检测方法(IQR原则) 

3,有哪些方法可以给出特征间的关系性?

例题1:

1,识别data1中的缺省值:

 2,对所有的缺省值至少使用两种方法进行插补,必须包含拉格朗日插值法:(1)补0法:

3,选择合适的方法合并处理后的data1和给定的data2:

例题2:

1,识别给定数据data3中缺失值并处理:

 2,画出data3中’PM2.5','PM10','SO2','CO','NO2','O3'几项的热力相关图,并给出结论:

3,画出’PM2.5','PM10','SO2','CO','NO2','O3'分别与’AQI’的对应散点图:

 4,将质量等级一项数据画饼状图,并转为独热编码


在我们解决具体的问题之前,我们可以先了解一下处理数据的原理:

原理:

1,处理缺省值的三种方法?

        (1)删除含有缺省值的数据。

        局限:这种方法简单易行,但可能会损失大量有价值的数据信息,适用于数据集中缺失值比例较小且对建模不是特别关键的情况。

        (2)用全局常数替换缺失值。

        例如将缺失值替换成0或均值、中位数等固定值,

        局限:该方法适用于数据缺失率比较低的情况,数据本身没有特别明显的分布规律时可以采用这种方法。

        (3)利用特征和标签间的关系进行预测和插值。

        这种方法可以通过建立回归、分类或聚类等机器学习模型,预测缺失值并进行插值。这种方法可以利用数据之间的相关性,保留更多的有价值数据信息,因此在处理缺省值时较为常用。

2,详细解释一种异常值检测方法(IQR原则) 

        1.异常值是指与其他观测值相比,明显偏离正常规律的观测值。在机器学习和统计数据分析中,异常值的存在可能会导致模型预测性能下降,因此需要进行异常值检测和处理。

        2.IQR原则是最常用的箱线图法之一,箱线图法就是通过绘制箱线图来判断数据是否存在异常值,判断标准是在箱线之外的数据点被视为异常值。其核心思想是通过计算数据分布的四分位间距(IQR),来判断数据是否存在异常值。IQR是指数据集的上四分位数(Q3)与下四分位数(Q1)之间的距离,即IQR=Q3-Q1。

        3.它的具体的判断异常值的步骤如下:

        (1)数据集的四分位数:Q1,Q2,Q3​。

        (2)四分位间距(IQR):IQR=Q3-Q1。

        (3)下临界值和上临界值:Q1-1.5XIQR和Q3+1.5XIQR。

        (4)判断数据是否为异常值,具体是将小于下临界值或大于上临界值的数据视为异常值。

    4.需要的计算量为数据集的四分位数,四分位间距,下临界值和上临界值。

        5.具体的过程如下:

        首先,需要计算出数据集的四分位数Q1,Q2,Q3​,其中Q1表示数据排序后中间位置左边的数的中位数,Q2表示数据的中位数,Q3表示数据排序后中间位置右边的数的中位数。

        根据四分位数的定义,可以很容易地计算出四分位距IQR,即,Q3-Q1。

        接着,根据IQR原则,计算出数据集的下限值和上限值,分别为Q1-1.5XIQR和Q3+1.5XIQR。

        最后,遍历数据集中每一个数字,将小于下限值或大于上限值的数字视为异常值。

        通过以上过程,我们可以得到结论,在使用IQR原则进行异常值检测时,需要通过计算出数据的上下临界值,然后判断数据是否超出这个范围来决定是否为异常值,通过计算数据集的四分位数、IQR和临界值,可以得出哪些数据是异常值,即小于下临界值或大于上临界值的数据被视为异常值。

3,有哪些方法可以给出特征间的关系性?

  • 相关系数分析:可通过计算不同特征之间的相关系数(如皮尔逊相关系数、斯皮尔曼相关系数等)来表征它们之间的线性或非线性相关程度。通常情况下,当相关系数大于0.7或小于-0.7时,可认为两个特征之间具有较强的相关性。
  • 热力图:对于数据集中各个特征,根据它们之间的相关性程度绘制出一个矩阵,即热力图。通过热力图可以方便地观察特征之间的相关性,并进行初步的筛选。
  • 主成分分析(PCA):通过将数据进行正交变换,可以将高度相关的特征组合为一组线性无关的主成分,从而降低数据的维度。利用PCA可以快速识别并去除高度相关的特征。
  • 因子分析:类似于PCA,因子分析可以通过将数据进行旋转来找到潜在的变量(因子),并将原始特征映射到这些因子上。可以通过选择最具信息量的因子来识别和解释特征之间的相关性。
  • 决策树:通过构建决策树,可以对数据集中不同特征之间的相关性进行可视化,并判断哪些特征对模型预测结果更为关键。

例题1:

1,识别data1中的缺省值:

data1:

yx1x2x3
1.25961.4332-0.40271.8623
0.2011.1281-0.60432.6514
0.19642.65140.48450.3813
-0.31531.86231.0784-0.3003
1.55720.83970.4912-0.3003
1.90840.34041.0784
-0.7705-0.945-0.8115-0.6214
0.49521.25960.35880.1421
0.50290.032-0.31570.032
1.34851.25962.65141.2596
1.93241.90842.65140.5482
1.631-0.8472.30760.0342
1.28840.03160.1421
0.55060.53822.35670.2326
-0.1707-0.69121.83521.2596
0.5506-0.62830.66441.7271
-0.13530.29272.65144.4375
1.2596-0.69121.24990.9677
-0.62962.36352.8394
1.25960.34041.25960.0872
import pandas as pd

xlsx_file='data1.xlsx'

feature = pd.read_excel(xlsx_file, usecols=[0,1,2,3])
feature = pd.DataFrame(feature)
#识别缺失值位置,如果为缺失值,就为true
print(feature.isnull())
#识别每一列缺失值数量
print(feature.isnull().sum())

 2,对所有的缺省值至少使用两种方法进行插补,必须包含拉格朗日插值法:
(1)补0法:

import pandas as pd

xlsx_file='data1.xlsx'

feature = pd.read_excel(xlsx_file, usecols=[0,1,2,3])
feature = pd.DataFrame(feature)

print("补0法")
df1 = feature.fillna(0)
print(df1)

(2)拉格朗日法:

import pandas as pd
import numpy as np

def lagrange_interpolation(x, y, x_new):
    n = len(x)
    result = 0.0
    for i in range(n):
        prod = 1.0
        for j in range(n):
            if j != i:
                prod *= (x_new - x[j]) / (x[i] - x[j])
        result += y[i] * prod
    return result

df = pd.read_excel('data1.xlsx')
x_known = np.array(df['x1'])  # 已知数据点的自变量值
y_known = np.array(df['y'])  # 已知数据点的函数值

y_missing = np.array([5, 12, 18])

x_missing = [lagrange_interpolation(x_known, y_known, y) for y in y_missing]

print("已知数据点:")
print("x:", x_known)
print("y:", y_known)

print("待补全数据点:")
print("x:", y_missing)

print("拉格朗日插值法补全结果:")
print("y:", x_missing)

结果: 

3,选择合适的方法合并处理后的data1和给定的data2:

data2:

z1x1z2z3
0.89121.43322.46470.5174
-0.0381.12811.63521.0784
0.5532.6514-0.62140.4952
0.6261.86230.07821.6175
0.96770.83970.32380.823
-0.26331.9084-0.39580.9768
1.2596-0.9450.37440.4845
0.5561.25961.07840.5174
0.3250.0321.25961.0784
-0.94691.25962.65141.3037
0.05311.90840.66440.0782
0.0784-0.8472.6514-2.7681
1.46471.2884-0.7705-1.5628
2.46470.53821.1107-1.258
0.7936-0.6912-1.91270.4912
-0.3157-0.62831.25960.2539
0.48450.2927-0.659-0.8568
2.5522-0.69120.0102-0.7561
-0.8115-0.62961.270.0649
1.03220.34041.2596-1.308
import pandas as pd

da1=pd.read_excel("data1.xlsx",sheet_name='Sheet1')
da2=pd.read_excel("data2.xlsx",sheet_name='Sheet1')
da3=da1.fillna(0)
mix=pd.merge(da3,da2,on='x1')
print(mix)

例题2:

1,识别给定数据data3中缺失值并处理:

data3:

 

import pandas as pd

xlsx_file='data3.xlsx'
feature = pd.read_excel(xlsx_file, usecols=[0,1,2,3,4,5,6,7,8])
feature = pd.DataFrame(feature)
print(feature)
# 补0法
df1 = feature.fillna(0)
print(df1)

 2,画出data3中’PM2.5','PM10','SO2','CO','NO2','O3'几项的热力相关图,并给出结论:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = pd.read_excel('data3.xlsx')

df = data[['PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3']]

corr = df.corr()

sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap of Air Pollutants')
plt.show()

 

结论:

        根据热力图,我们可以看出来PM2.5 和 PM10 通呈现出正相关,他们之间相互影响,其中一个增长,另外一个也会增加。SO2 和 O3 呈现出负相关,这是因为它们代表的是不同的污染物指标,其中一个变量的值增加时,另一个变量的值会随之减少。CO 和 NO2 之间的相关性通常比较弱,增加或减少其中一个变量的值,对另一个变量的值没有明显的影响。

3,画出’PM2.5','PM10','SO2','CO','NO2','O3'分别与’AQI’的对应散点图:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel('data3.xlsx')

fig, axs = plt.subplots(2, 3, figsize=(15, 10))
axs = axs.flatten()
for i, col in enumerate(['PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3']):
    axs[i].scatter(data[col], data['AQI'])
    axs[i].set_xlabel(col)
    axs[i].set_ylabel('AQI')
plt.show()

 4,将质量等级一项数据画饼状图,并转为独热编码

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel('data3.xlsx')

counts = data['质量等级'].value_counts()

plt.pie(counts, labels=counts.index)
plt.title('饼图-质量等级')
plt.show()

one_hot = pd.get_dummies(data['质量等级'])
print(one_hot.head())

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会Java的MING

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值