1.什么是机器学习
机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测。
2.数据类型
离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度。
连续型数据:变量可以在某个范围内取任一数,即变量的取值可以是连续的,如,长度、时间、质量值等,这类整数通常是非整数,含有小数部分。
总之,离散型是区间内不可分,连续型是区间内可分。
3.特征工程
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。
4.字典特征抽取
DictVectorizer语法:
DictVectorizer.fit_transform(X), X:字典或者包含字典的迭代器,返回值:返回sparse矩阵(稀疏矩阵)。
DictVectorizer.inverse_transform(X), X:array数组或者sparse矩阵,返回值:转换之前数据格式。
DictVectorizer.get_feature_names( ), 返回类别名称。
DictVectorizer.transform(X), 按照原先的标准转换。
5.文本特征抽取
CountVectorizer语法:
CountVectorizer.fit_transform(X), X:文本或者包含文本字符串的可迭代对象,返回值:返回sparse矩阵
CountVectorizer.inverse_transform(X), X:array数组或者sparse矩阵,返回值:转换之前数据格式
CountVectorizer.get_feature_names( ), 返回值:单词列表
6.TF-IDF
TF-IDF的主要思想是:如果某个词或短语在一篇文章找那个出现的概率高,并且在其他文章中很少出现,则认为 此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
TfidfVectorizer语法:
TfidfVectorizer.fit_transform(X),X:文本或者包含文本字符串的可迭代对象,返回值:返回sparse矩阵
TfidfVectorizer.inverse_transform(X),X:array数组或者sparse矩阵,返回值:转换之前数据格式
TfidfVectorizer.get_feature_names( ),返回值:单词列表
7.特征处理
通过特定的统计方法(数学方法)将数据转换成算法要求的数据
数值型数据:标准缩放:
1.归一化 2.标准化 3.缺失值
类别型数据:one-hot编码
时间类型:时间的切分
sklearn特征处理API:sklearn.preprocessing
归一化:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
MinMaxScaler语法:
MinMaxScaler.fit_transform(X), X:numpy array 格式的数据[ n_samples, n_features],返回值:转换后的形状 相同的array
总结:在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点的影响,所以这种方法的鲁棒性较差,只适合传统精确小数据场景。
标准化: 通过对原始数据进行变换,把数据变换到均值为0,方差为1范围内
归一化和标准化的比较:
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变。
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改 变较小。
StandardScaler语法:
StandardScaler.fit_transform(X), X:numpy array格式的数据[ n_samples, n_features],返回值:转换后的形状 相同的array.
StandardScaler.mean_ , 原始数据中每列特征的平均值
StandardScaler.std_ , 原始数据每列特征的方差
标准化总结:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
缺失值:缺失值处理方法:
删除:如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列
插补:可以通过缺失值每行或者每列的平均值、中位数来填充
sklearn缺失值API:sklearn.preprocessing.Imputer
Imputer语法:
Imputer(missing_values='NaN',strategy='mean',axis = 0):完成缺失值插补
Imputer.fit_transform(X), X:numpy array格式的数据[ n_samples, n_features ],返回值:转换后的形状相同的 array
numpy的数组中可以使用np.nan/np.NaN来代替缺失值,属于float类型
如果是文件中的一些缺失值,可以替换成nan,通过np.array转化成float类型的数组即可
8.特征选择
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只是选择了其中的一部分特征。
主要方法:Filter(过滤式):VarianceThreshold
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
VarianceThreshold语法:
VarianceThreshold(threshold = 0.0),删除所有低方差特征
Variance.fit_transform(X), X:numpy array格式的数据[ n_samples, n_features],返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值得特征。
sklearn降维API: sklearn.decomposition
9.PCA
PCA:PCA是一种分析、简化数据集的技术。
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量。
PCA语法:
PCA( n_components = None ), 将数据分解为较低维数空间
PCA.fit_transform(X),X:numpy array格式的数据[ n_samples, n_features],返回值:转换后制定维度的array.
代码:
#encoding=utf-8 from sklearn.feature_extraction import DictVectorizer from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import StandardScaler from sklearn.feature_selection import VarianceThreshold from sklearn.decomposition import PCA import jieba """文本特征提取""" def dictvec(): #字典数据抽取 dict = DictVectorizer(sparse = False) #调用fit_transform data = dict.fit_transform([{'city': '北京','temperature':100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature':30}]) print(dict.get_feature_names()) print(dict.inverse_transform(data)) print(data) return None def countvec(): #对文本进行特征值化 cv = CountVectorizer() data = cv.fit_transform(["life is is short,i like python","life is too long,i dislike python"]) print(cv.get_feature_names()) print(data.toarray()) return None def cutword(): #jieba分词 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 hanzivec(): #中文特征值化 c1,c2,c3 = cutword() print(c1,c2,c3) cv = CountVectorizer() data = cv.fit_transform([c1,c2,c3]) print(cv.get_feature_names()) print(data.toarray()) return None def tfidfvec(): c1,c2,c3 = cutword() print(c1,c2,c3) cv = TfidfVectorizer() data = cv.fit_transform([c1,c2,c3]) print(cv.get_feature_names()) print(data.toarray()) return None def mm(): #归一化处理 mm = MinMaxScaler(feature_range=(2,3)) #对应的列进行计算 data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]]) print(data) return None def stand(): #标准化缩放 mm = StandardScaler() data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]]) print(data) def var(): #特征选择-删除低方差的特征 var = VarianceThreshold(threshold=1.0) data = var.fit_transform([[0,2,0,3],[0,1,4,3],[0,1,1,3]]) print(data) return None def pca(): #主成分分析进行降维 pca = PCA(n_components=0.9) data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]]) print(data) return None if __name__=="__main__": #dictvec() #countvec() #tfidfvec() #mm() #stand() #var() #pca()