机器学习基础 数据集、特征工程、特征预处理、特征选择 7.27

机器学习基础

tex 复制代码
1. 数据集
2. 特征工程
3. 学习分类
4. 模型
5. 损失函数
6. 优化
7. 过拟合
8. 欠拟合

数据集

tex 复制代码
又称资料集、数据集合或者资料集合,是一种由数据所组成的集合

特征工程

tex 复制代码
1. 特征需求
2. 特征设计
3. 特征处理
	特征预处理、特征选择、特征降维
4. 特征验证

特征预处理

tex 复制代码
特征预处理:
	1.无量纲化
	2.信息提取
	3.信息数据化
	4.缺失补全
	5.信息利用率均衡

无量纲化

1.标准化

python 复制代码
import numpy as np
# 从sklearn框架的 preprocessing预处理模块中导入StandardScaler类
from sklearn.preprocessing import StandardScaler

# 准备7个点的x坐标
x = np.arange(7).reshape(7, 1)
# 准备7个点的y坐标
y = np.array([2, 10, 35, 100, 45, 20, 5]).reshape(7, 1)
# 将x和y合并成一个二维数组,代表7个点的数据,每行代表一个点的(x, y)坐标值
# x_data就成为 机器学习的数据集
x_data = np.hstack((x, y))
print(x_data)

# 数学公式 :x = (x - x_mean)/x_std 数学公式的标准化处理
# np.mean() : 求平均值
# np.std()  : 求方差,标准差
xx = (x_data - np.mean(x_data))/np.std(x_data)
print(xx)

# 实例标准化处理的类对象
scaler = StandardScaler()
# 通过类对象标准化处理数据  fit_transform() : 处理数据
xx = scaler.fit_transform(x_data)
print(xx)
"""
    标准化使用前提:让数据处理后处于同一规格,并且任然呈现 正态分布
    1、数据的规格或者单位不一致
    2、数据成正态分布
"""

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day6\1.特征预处理\1.无量纲化\1.标准化.py 
[[  0   2]
 [  1  10]
 [  2  35]
 [  3 100]
 [  4  45]
 [  5  20]
 [  6   5]]
[[-0.64175426 -0.56625376]
 [-0.60400401 -0.26425176]
 [-0.56625376  0.67950451]
 [-0.52850351  3.13327081]
 [-0.49075326  1.05700702]
 [-0.45300301  0.11325075]
 [-0.41525276 -0.45300301]]
[[-1.5        -0.91367316]
 [-1.         -0.66162539]
 [-0.5         0.12602388]
 [ 0.          2.173912  ]
 [ 0.5         0.44108359]
 [ 1.         -0.34656568]
 [ 1.5        -0.81915524]]

进程已结束,退出代码0

2.归一化

python 复制代码
import numpy as np
# 从sklearn框架的 preprocessing预处理模块中导入Normalizer归一化处理类
from sklearn.preprocessing import Normalizer

# 准备7个点的x坐标
x = np.arange(7).reshape(7, 1)
# 准备7个点的y坐标
y = np.array([2, 10, 35, 60, 100, 200, 250]).reshape(7, 1)

x_data = np.hstack((x, y))
# 数学公式 : x = (x - x_mean)/(x_max - x_min)
xx = (x_data - np.mean(x_data)) / (np.max(x_data) - np.min(x_data))
print(x_data)
print(xx)

normalizer = Normalizer()
xx = normalizer.fit_transform(x_data)
print(xx)

"""
    归一化处理前提:处理后的数据处于同一量级,并且被缩放到[0, 1]之间
    1.数据规格或者单位不一致
    2.数据没有呈现正态分布,呈现线性变化
"""

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day6\1.特征预处理\1.无量纲化\2.归一化.py 
[[  0   2]
 [  1  10]
 [  2  35]
 [  3  60]
 [  4 100]
 [  5 200]
 [  6 250]]
[[-0.19371429 -0.18571429]
 [-0.18971429 -0.15371429]
 [-0.18571429 -0.05371429]
 [-0.18171429  0.04628571]
 [-0.17771429  0.20628571]
 [-0.17371429  0.60628571]
 [-0.16971429  0.80628571]]
[[0.         1.        ]
 [0.09950372 0.99503719]
 [0.05704979 0.99837133]
 [0.04993762 0.99875234]
 [0.03996804 0.99920096]
 [0.02499219 0.99968765]
 [0.02399309 0.99971212]]

进程已结束,退出代码0

信息数据化

1.特征二值化

python 复制代码
import numpy as np

# 从框架的 预处理模块导入 特征二值化处理类 Binarizer
from sklearn.preprocessing import Binarizer

x = np.array([20, 35, 40, 75, 60, 55, 50]).reshape(-1, 1)

# 构造二值化对象,设定分类的阈值 threshold=50
scaler = Binarizer(threshold=50)
# 处理数据
xx = scaler.fit_transform(x)
print(xx)

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day6\1.特征预处理\2.信息数据化\1.特征二值化.py 
[[0]
 [0]
 [0]
 [1]
 [1]
 [1]
 [0]]

2. Ont-hot编码

python 复制代码
"""
    ont-hot编码,又称独热编码。目的是保证每个数据 距远点相同位置。每个可能出现的结果概率相同
"""
import numpy as np
from  sklearn.preprocessing import OneHotEncoder
y = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]).reshape(-1, 1)

# 构造ont-hot编码对象,指定sparse存储方式:稀疏存储方式False
scaler = OneHotEncoder(sparse=False)
yy = scaler.fit_transform(y)
print(yy)

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day6\1.特征预处理\2.信息数据化\ont-hot编码.py 
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]

3.缺失数据补全

python 复制代码
import numpy as np
# 缺失数据补全
from sklearn.impute import SimpleImputer
x = np.array([[1,   2,   3,   4],
             [1,  np.nan, 5, 6],
             [7,   2,   np.nan, 11],
             [np.nan, 25, 25,  16]])
# 构造补全法的类对象,指定补全的方法
"""
    补全方法 strategy:
        1."mean":平均数补齐法。当前特征列其余数据的平均值
        2."median":中位数补全法。数据从小到大中间的数据
        3."most_frequent":出现次数最多的数据补全。如果出现次数都一样,则取第一个
"""

xx = SimpleImputer(strategy="mean").fit_transform(x)
xx = SimpleImputer(strategy="median").fit_transform(x)
xx = SimpleImputer(strategy="most_frequent").fit_transform(x)
xx = SimpleImputer(strategy="constant").fit_transform(x)

print(xx)

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day6\1.特征预处理\2.信息数据化\缺失数据补全.py 
[[ 1.  2.  3.  4.]
 [ 1.  0.  5.  6.]
 [ 7.  2.  0. 11.]
 [ 0. 25. 25. 16.]]

特征选择

1.方差选择法

python 复制代码
import numpy as np

# 从框架的 特征选择模块导入 VarianceThreshold方差选择法
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]])

# 计算各特征列的方差值
# x.shape --> (4, 5)  x.shape[1] ==> 5
for i in range(x.shape[1]):
    # np.var() :计算数据的方差
    print("第{}列的方差值为{}" .format(i, np.var(x[:, i])))
# 方差值越小说明该特征列的数据发散性不好,对于机器学习没有什么意义,因此需要省略
# 构造方差选择法的对象,指定筛选的方差阈值为100,保留方差值大于100的特征列
feature = VarianceThreshold(threshold=100)
xx = feature.fit_transform(x)
print(xx)
# variances_:该属性返回 各特征列的方差值
print(feature.variances_)

"""
    方差选择法:特征列数据越发散,特征就越明显,方差值就越大
    1.特征选择法,可以让预处理后的特征数据量减小,提升机器学习的效率
    2.特征量少了,特征值反而更明显,机器学习的准确性更强
"""

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day6\2.特征选择\1.方差选择法.py 
第0列的方差值为843.5
第1列的方差值为9.6875
第2列的方差值为32.1875
第3列的方差值为113.1875
第4列的方差值为438.6875
[[78 34 98]
 [23 56 71]
 [10 31 60]
 [ 5 30 40]]
[843.5      9.6875  32.1875 113.1875 438.6875]

2.相关系数法

python 复制代码
"""
    相关系数法:判断特征数据对于目标(结果)的相关性。相关性越强说明特征越明显
"""
import numpy as np
from sklearn.feature_selection import SelectKBest

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个, 只能用0和1表示
y = np.array([1, 1, 1, 0])

# 构造 相关系数选择法的对象,指定相关性最强的 k列数据保存
k = SelectKBest(k=3)
xx = k.fit_transform(x, y)
# pvalues : 相关系数 p值,p值越小相关性越强;
# scores_ : 相关系数 s值,s值越小,相关性越弱
print(k.pvalues_)
print(k.scores_)
print(xx)

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day6\2.特征选择\2.相关系数法.py 
[0.5229015  0.02614832 0.00779739 0.5794261  0.24884702]
[  0.58940905  36.75       126.75         0.42978638   2.5895855 ]
[[23 12 98]
 [22 13 71]
 [21 14 60]
 [29 26 40]]
相关推荐
今天也想MK代码34 分钟前
基于WebRTC的实时语音对话系统:从语音识别到AI回复
人工智能·webrtc·语音识别
Vizio<1 小时前
基于CNN的猫狗识别(自定义CNN模型)
人工智能·笔记·深度学习·神经网络·cnn
kovlistudio1 小时前
机器学习第十三讲:独热编码 → 把“红黄蓝“颜色变成001/010/100的数字格式
人工智能·机器学习
豆豆1 小时前
机器学习 day03
人工智能·机器学习
qyresearch_1 小时前
砷化镓太阳能电池:开启多元领域能源新篇
人工智能
山海不说话2 小时前
深度学习(第3章——亚像素卷积和可形变卷积)
图像处理·人工智能·pytorch·深度学习·目标检测·计算机视觉·超分辨率重建
2201_754918412 小时前
深入理解 OpenCV 的 DNN 模块:从基础到实践
人工智能·opencv·dnn
-一杯为品-2 小时前
【深度学习】#12 计算机视觉
人工智能·深度学习·计算机视觉
蹦蹦跳跳真可爱5892 小时前
Python----神经网络(《Searching for MobileNetV3》论文概括和MobileNetV3网络)
人工智能·python·深度学习·神经网络
妄想成为master2 小时前
如何完美安装GPU版本的torch、torchvision----解决torch安装慢 无法安装 需要翻墙安装 安装的是GPU版本但无法使用的GPU的错误
人工智能·pytorch·python·环境配置