机器学习基础
 
1. 数据集
2. 特征工程
3. 学习分类
4. 模型
5. 损失函数
6. 优化
7. 过拟合
8. 欠拟合
 
数据集
 
又称资料集、数据集合或者资料集合,是一种由数据所组成的集合
 
特征工程
 
1. 特征需求
2. 特征设计
3. 特征处理特征预处理、特征选择、特征降维
4. 特征验证
 
特征预处理
 
特征预处理:1.无量纲化2.信息提取3.信息数据化4.缺失补全5.信息利用率均衡
 
无量纲化
 
1.标准化
 
import numpy as np
from sklearn.preprocessing import StandardScaler
x = np.arange(7).reshape(7, 1)
y = np.array([2, 10, 35, 100, 45, 20, 5]).reshape(7, 1)
x_data = np.hstack((x, y))
print(x_data)
xx = (x_data - np.mean(x_data))/np.std(x_data)
print(xx)
scaler = StandardScaler()
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.归一化
 
import numpy as np
from sklearn.preprocessing import Normalizer
x = np.arange(7).reshape(7, 1)
y = np.array([2, 10, 35, 60, 100, 200, 250]).reshape(7, 1)x_data = np.hstack((x, y))
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.特征二值化
 
import numpy as np
from sklearn.preprocessing import Binarizerx = np.array([20, 35, 40, 75, 60, 55, 50]).reshape(-1, 1)
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编码
 
"""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)
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.缺失数据补全
 
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.方差选择法
 
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])))
feature = VarianceThreshold(threshold=100)
xx = feature.fit_transform(x)
print(xx)
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.相关系数法
 
"""相关系数法:判断特征数据对于目标(结果)的相关性。相关性越强说明特征越明显
"""
import numpy as np
from sklearn.feature_selection import SelectKBestx = np.array([[78, 23, 12, 34, 98],[23, 22, 13, 56, 71],[10, 21, 14, 31, 60],[5, 29, 26, 30, 40]])
y = np.array([1, 1, 1, 0])
k = SelectKBest(k=3)
xx = k.fit_transform(x, y)
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]]