1.机器学习数据
1.数据文件
-
使用文件csv
-
不适用MySQL:性能瓶颈,读取速度。格式不太复合机器学习的数据格式
2.可用数据集
-
kaggle
-
uci
-
scikit-learn
3.数据格式
特征+目标 | 特征1 | 特征2 | 目标值 |
---|---|---|---|
样本1 | |||
样本2 | |||
样本3 |
注:有些数据可 没有目标值
4.数据特征处理
-
pandas:一个数据读取非常方便以及基本的处理格式的工具
-
sklearn:对于特征的处理提供了强大的接口
2.特征工程
1.定义
-
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性
-
fit:原义指的是安装、使适合的意思,其实有点train的含义但是和train不同的是,它并不是一个训练的过程,而是一个适配的过程,过程都是定死的,最后只是得到了一个统一的转换的规则模型
-
transform:是将数据进行转换,比如数据的归一化和标准化,将测试数据按照训练数据同样的模型进行转换,得到特征向量
-
fit_transform:可以看做是fit和transform的结合,如果训练阶段使用fit_transform,则在测试阶段只需要对测试样本进行transform就行了
2.矩阵格式
稀疏矩阵的转换,节约内存
3.字典数据特征抽取
dict = DictVectorizer(sparse=False) #sparse是否转换成稀疏矩阵存储 dict.fit_transform([{'city':'beijing','value':100},{'city':'shanghai','value':50}])
通过字典特征提取,可把字典数据转换成矩阵数据。
字典数据抽取:把字典中一些类别的数据,分别进行转换成特征
4.文本特征抽取
1.单词次数统计
from sklearn.feature_extraction.text import CountVectorizer
def textvec(): # 文本统计 cv = CountVectorizer() data = cv.fit_transform(["life is short,l like python","life is too long,i dislike python"]) print(cv.get_feature_names()) print(data.toarray()) return None
特征提取是以空格为单位划分。
若要提取中文文本时,首先要把中文单词划分开。
def transtoword(): con1 = jieba.cut("人生苦短,及时行乐") con2 = jieba.cut("中华人民共和国万岁") con3 = jieba.cut("世界人民大团结万岁") #转换成列表 content1 = list(con1) content2 = list(con2) content3 = list(con3) #把列表转换成字符串 c1 = ' '.join(content1) c2 = ' '.join(content2) c3 = ' '.join(content3) return c1,c2,c3 def chinesevec(): # 中文文本统计 c1,c2,c3 = transtoword() cv = CountVectorizer() data = cv.fit_transform([c1,c2,c3]) print(cv.get_feature_names()) print(data.toarray()) return None
2.单词重要性统计
from sklearn.feature_extraction.text import TfidfVectorizer
def tfdifvec(): #单词重要性统计 c1,c2,c3 = transtoword() cv = TfidfVectorizer() data = cv.fit_transform([c1,c2,c3]) print(cv.get_feature_names()) print(data.toarray()) return None
重要性根据 出现频率*其他文章的逆占比。故该值越大,该词越具有文章代表性
5.特征预处理
1.定义
通过特定的统计方法,将数据转换成算法要求的数据
2.类型
-
数据型数据:标准缩放
-
归一化
-
标准化
-
缺失值
-
-
类别型数据:ont-hot编码
-
时间类型:时间的切分
3.归一化
API:sklearn.preprocessing.MinMaxScaler
当所有特征同等重要的时候:进行归一化处理
特点:通过对原始数据进行变换把数据映射到(默认[0,1])之间
目的:使得某一个特征不会对最终的结果照成很大的影响
from sklearn.preprocessing import MinMaxScaler def mm(): #归一化处理 MM = MinMaxScaler() data = MM.fit_transform([[1,2,3],[4,5,6],[7,8,9]]) print(data) return None
总结:当存在异常点时候,最大值最小值是变化的,极易受到异常点的影响,所以此方法鲁棒性(适应性)较差,只适合传统精确小数据场景
4.标准化
API:sklearn.preprocessing.StandardScaler
目的:使得某一个特征不会对最终的结果照成很大的影响
特点:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内。其中 方差(考虑数据的稳定性)不易受到异常点影响
def stand(): #标准化处理 SS = StandardScaler() data = SS.fit_transform([[1,2,3],[4,5,6],[7,8,9]]) print(data) return None
5.缺失值
API:
from sklearn.impute import SimpleImputer import numpy as np
def im(): #缺失值处理 IM = SimpleImputer(missing_values=np.nan,strategy='mean') data = IM.fit_transform([[1,2,3],[np.nan,5,6],[7,8,9]]) print(data) return None
利用平均值处理缺失值
6.数据降维
维度=特征数量,降维即删除一些不必要的特征
-
Filter(过滤式):VarianceThreshold,方差式过滤 当方差为0时 说明该特征所有值一样。
-
Embedded(嵌入式):正则化,决策树
-
Wrapper(包裹式)
1.特征选择
特征选择就是单纯地提取到所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值,也可不改变值,但是选择前后维度会减小
Filter(过滤式):
from sklearn.feature_selection import VarianceThreshold def var(): #降维处理 vt = VarianceThreshold(threshold=0.0) data = vt.fit_transform([[0,2,3],[0,5,6],[0,8,9]]) print(data) return None
2.主成分分析
本质:PCA是一种分析,简化数据集的技术
目的:是数据维度压缩,尽可能降低原数据的维数(复杂度),损失少量信息
作用:可以削减回归分析或者聚类分析中特征数量(自动化)
from sklearn.decomposition import PCA def pca(): #pca主成分分析 pca = PCA(n_components=0.8) data = pca.fit_transform([[0,2,3],[0,5,6],[0,8,9]]) print(data) return None
3.算法分类以及开发流程
1.数据类型
-
离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,这些数只能是整数
-
连续型数据:变量可以在某个范围内任取一数,即变量的数值是连续性的
-
区别:离散是区间不可再分,连续是区间可分
2.算法分类
-
监督学习(特征值+目标值)
-
分类(目标值离散型):k-邻近算法,贝叶斯分类,决策树与随机森林,逻辑回归,神经网络
-
回归(目标值连续型):线性回归,岭回归
-
标注:隐马尔科夫模型
-
-
无监督学习(特征值)
-
聚类:k-means
-
3.开发流程
建立模型:根据数据类型划分应用种类
-
原始数据明确问题是做什么
-
数据的基本处理(特征预处理):pd处理数据(缺失值,合并表......)
-
特征工程(特征进行处理)
-
分类
-
回归
-
模型=算法+数据
-
-
找到合适算法进行预测
-
模型评估,判断效果
-
不合格->换算法,参数 修改特征工程
-
合格->上线使用,以API形式提供
-