python与人工智能:机器学习基础,特征预处理

目录

什么是机器学习?

机器学习的应用场景

机器学习的一些基本概念

1.数据集

2.特征工程

特征预处理

1.无量纲化

 2.数据信息化处理

 3.特征选择


什么是机器学习?

        人工智能的一个分支,机器学习是从 数据 自动分析,获得规律(模型) ,并利用规律 对未知数据进行预测 。 机器学习一直是人工智能的核心话题,但是不能完全代表人工智能。

机器学习的应用场景

l 金融领域
金融领域使用机器学习建模最多的场景就是风控,如: 信用卡交易反欺诈 信用卡申请反欺诈、贷款申请反欺诈、反洗钱 等, 主要是 分类任务 GBDT算法+LR逻辑回归 ;其次, 营销场景 为用户推荐理财产品、基金产品、保险产品或者邀请用户办 理信用卡账单分期等,这部分主要用的都是推荐的算法。
l 媒体领域
在媒体领域最典型的如: 今日头条,小红书、抖音 等,这里面最常应用机器学习的就是 推荐场景 基于内容item的推荐、基 于知识图谱的推荐、基于协同过滤算法的推荐 。大家经常发现的一点就是今日头条、小红书、抖音等,经常会根据你之前 看过的一些内容来给你推相关内容。
l 零售领域
在零售领域,使用机器学习建模最多的场景也是 推荐场景 APP上购物 车页面提交订单时为用户推荐相似商品、推荐可能感 兴趣的商品,以及针对什么样的用户推荐什么样的优惠券等等。此外,还有 某类商品进行销量预测 ,根据预测量来调整商品 的供给,这里主要是构建一个 回归模型。
l CV、NLP
计算机视觉(CV)、自然语言处理(NLP)是当下人工智能落地最广泛的领域,相比较而言,CV技术更成熟,应用更广泛。
2者一般都使用 深度模型。

机器学习的一些基本概念

1.数据集

        数据集,又称为资料集、数据集合或资料集合,是一种由数据所组成的集合。 在人工智能领域,数据和样本就是准确率是否能提高的基本保障。 机器从这些数据集中学习相关的知识进而智能化。

2.特征工程

        数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已, 特征工程就是 通过X,创造新的X’ 最大限度地从 原始数据中提取特征以供算法和模型使用, 其基本的操作包括 ,衍生(升维),筛选(降维)。
特征工程主要包括(软件开发流程):
特征需求: 理定项目的特征需求(如图像识别,需求可以是从图像数据中获取机器可识别特征,进行图像识别),从数 据集中获取,需要考虑样本数量、分类、准确性等。
特征设计: 需要把需求转换为可落地方案,如:特征如何获取,特征如何存储,特征如何保持均衡等。
特征处理: 使用相关算法,进行特征处理,包括:特征预处理、特征选择、特征降维。
特征验证: 通过测试验证特征是否有效。

特征预处理

无量纲化: 即特征的规格或单位不一样,我们需要去除数据单位,放在一起比较。
信息提取: 对于全部特征,我们可以去除不相干性特征,如:我们要考评学生能力,学生姓名特征可以去除。
信息数据化: 对于某些定量特征,包含有效数据为区间化的,如:学生成绩只关注A\B\C三个档次,那么我们可以用 0,1,2来描述成绩。
缺失补全: 缺失值需要补充,可以是平均值。
信息利用率均衡: 不同的机器学习算法和模型对数据中信息的利用是不同的,对定量变量多项式化,或者进行其他的转 换,使其能达到非线性的效果

1.无量纲化

(1)标准化处理
        标准化的前提是 特征值服从正态分布 ,标准化后,其值也是正态分布。标准化数据通过减去均值然后除以方差(或标准差),这种方法保 留了每个数据距离均值的差距比,所有数在 均值 为中心周围分布,且保证均值为0,方差为1,转化函数为: x =(x – x_mean)/x_std。
outlier(离群值) 对结果有影响,适用于数据正态分布,需要距离度量相识度的时候
import numpy as np
# 从sklearn框架的proprocessing包中导入standardscaler标准化的类
from sklearn.preprocessing import StandardScaler

x = np.arange(7).reshape(-1, 1)
y = np.array([10, 30, 50, 80, 55, 26, 8]).reshape(-1, 1)
# 将两个numpy数组组合成一个二维数组7行二列
x = np.hstack((x, y))
print(x)
"""
    特征数据标准化处理,x=(x-x_mean)/std(x)
    让特征数据处理完成后,处于同一个量级
"""
# xx = (x - np.mean(x)) / np.std(x)
# 构造标准化的对象
stand = StandardScaler()
# fit_transform:标准化处理数据
y = stand.fit_transform(x)
print(y)

 (2)归一化处理

        将特征缩放到给定的最小值和最大值之间。这种方法是对原始数据的线性变换(等比变化,大的缩小,小的放大),将数据归一到[0,1] 中间。转换函数为: x = (x-x_min)/(x_max-x_min)。 outlier(离群值) 对结果有影响,适用于数据非正态分布,不涉及距离度量等,
如图像处理。
import numpy as np
# 归一化的类
from sklearn.preprocessing import Normalizer

x = np.arange(7).reshape(-1, 1)
y = np.array([10, 20, 30, 40, 50, 60, 70]).reshape(-1, 1)
# 将两个numpy数组组合成一个二维数组7行二列
x = np.hstack((x, y))
print(x)
"""
    归一化处理: x = (x - x_min) / (x_max - x_min)
    让数据缩放到【0,1】
    要求:
        1.原始数据不在一个量级
        2.原始数据呈线性变化
"""
# xx = (x - np.min(x)) / (np.max(x) - np.min(x))
# print(xx)
# 构造归一化对象
normal = Normalizer()
# 将数据进行归一化处理
y = normal.fit_transform(x)
print(y)

(3)RobustScaler标准化

基本同标准化,转换函数为:x=(x-x_q2)/(x_q3-x_q1) 区别在于用中位数而不是算术平均数,用分位数(quantile)而不是方差。 
outlier(离群值) 不会 对结果有影响, 可以 处理数据中存在极大或极小outlier的情况(类似于去掉最高值,去掉最低值)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import RobustScaler

x = np.arange(7).reshape(-1, 1)
y = np.array([10, 30, 50, 80, 55, 26, 8]).reshape(-1, 1)
# 将两个numpy数组组合成一个二维数组7行二列
x = np.hstack((x, y))
print(x)
robust = RobustScaler()
y = robust.fit_transform(x)
print(y)
plt.subplot(221)
plt.bar(x[:, 0], x[:, 1], color='r')
plt.title("src")

plt.subplot(222)
plt.bar(y[:, 0], y[:, 1], color='b')
plt.title("robust")

plt.subplot(223)
plt.scatter(x[:, 0], x[:, 1], color='g')

plt.subplot(224)
plt.scatter(y[:, 0], y[:, 1], color='y')
plt.show()

 2.数据信息化处理

(1).二值化

定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0

import numpy as np
from sklearn.preprocessing import Binarizer
x = np.array([20, 35, 40, 75, 60, 55, 50]).reshape(-1, 1)
# 构造一个二值化对象,指定阈值
b = Binarizer(threshold=50)
y = b.fit_transform(x)
print(y)

 

(2).one-hot

对于相互没有依赖的数据,解决分类器不好处理属性数据的问题(分类器需要数据是连续的),并且到原点距离等 距(让特征值之间距离更加合理)。它的值只有0和1,不同的类型存储在垂直的空间
import numpy as np
from sklearn.preprocessing import OneHotEncoder
x = np.arange(9).reshape(-1, 1)
y = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]).reshape(-1, 1)
xx = np.hstack((x, y))
# 构造one-hot编码对象,指定存储方式为稀疏存储
one = OneHotEncoder(sparse=False)
yy = one.fit_transform(xx)
print(yy)

(3).缺失值补全

对于数值为nan的,表明是确实数据,对于这些缺失数据,我们可以采用下面几种方式:删除、填充平均值、填充最大值
import numpy as np
from sklearn.impute import SimpleImputer
x = np.array([[12,     34, 8,  33],
             [np.nan, 20, 15, 31],
             [8,   np.nan, 14, 17],
             [20, 25, np.nan, 41],
             [16, 18, 20, np.nan]])
# 构造缺失补全对象
# "mean":将空缺的特征列的平均值进行补全
# "median"中位数进行 补全
# "most_frequent":最小值进行补全
# "constant":空缺位置补0
xx = SimpleImputer(strategy="mean").fit_transform(x)
yy = SimpleImputer(strategy="median").fit_transform(x)
mm = SimpleImputer(strategy="most_frequent").fit_transform(x)
ww = SimpleImputer(strategy="constant").fit_transform(x)
print(xx)
print(yy)
print(mm)
print(ww)

 3.特征选择

(1)方差选择法

使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
import numpy as np
from sklearn.feature_selection import VarianceThreshold

x = np.array([
    [78, 23, 12, 34, 98],
    [23, 22, 13, 56, 71],
    [10, 21, 14, 31, 60],
    [5, 29, 26, 30, 40]])

# 手动计算方差值
for i in range(x.shape[1]):
    print("第{}列的方差值为:{}".format(i, np.var(x[:, i])))

# 构造方差选择法对象,设定阈值
selector = VarianceThreshold(threshold=100)
# 进行方差选择,保留大于阈值的数列
xx = selector.fit_transform(x)
# variances_ 自动求出每列的方差值
print(selector.variances_)
print(xx)

 

(2)相关系数法

        使用相关系数法,先要计算各个特征对标签的相关系数,以及相关系数的P值,P值越小,特征越明显。
import numpy as np

# 加载最优K值、分类器、回归器
from sklearn.feature_selection import SelectKBest, SelectPercentile, f_classif, f_regression

# 构建数据集
x = np.array([
    [78, 23, 12, 34, 98],
    [23, 22, 13, 56, 71],
    [10, 21, 14, 31, 60],
    [5, 29, 26, 30, 40]])
# 构建标签集,数据集有4行,表示有4个数据对象,标签就应该有对应的4个1, 0, 1, 0
label = np.array([1, 0, 1, 0])

# 构造K系数选择器对象,设置相关系数K = 3
selector = SelectKBest(f_classif, k=3)
# 根据K值学习, 筛选出相关性最强的数据
xx = selector.fit_transform(x, label)
# 打印个列的数据的相关性p值或者score值
print("p值:", selector.pvalues_)         # p值越大, 相关性越小
print("score值:", selector.scores_)      # core值越大, 相关性越大
print(xx)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值