记录一些听课时的笔记:
1. pandas: 用于数据读取和基本的格式处理;sklearn:特征处理(特征工程)
2. 特征工程主要任务:特征抽取 预处理 降维;特征抽取:文本 ,字符串,转换为数字形式,可以叫特征值化
3. sparse 矩阵:记录角标而不是整个向量,可以节约内存
4. 标准化比归一化更好用,因为归一化易受异常点的影响,而标准化均值为0标准差为
5. 处理缺失值时,注意看缺失值是什么格式,是NAN,还是?可以用replace来将?替换为 nan
展示一些代码和我的注释:
1.字典数据抽取
# 导入包,其中Imputer导入不了就用SimpleImputer
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.feature_selection import VarianceThreshold
from sklearn.decomposition import PCA
import jieba
import numpy as np
def dictvec():
"""
字典数据抽取
:return: None
"""
# 实例化,dict是一个对象
dict = DictVectorizer(sparse=False)
# 调用fit_transform,输入列表数据并转换,一共3个样本
data = dict.fit_transform([{'city': '北京','temperature': 100}, {'city': '上海','temperature':60}, {'city': '深圳','temperature': 30}])
print(data)
# 获取特征的表头
print(dict.get_feature_names())
# 原数据
print(dict.inverse_transform(data))
print(data)
return None
# 仅在主函数下运行,被import到其他函数是不会被调用的
if __name__ == "__main__":
dictvec()
2. 文本特征抽取
def countvec():
"""
对文本进行特征值化
:return: None
"""
# cv本来是用来处理英文单词的,如果是单独一个字或者字母,这里就不会显示
cv1 = CountVectorizer()
data1 = cv1.fit_transform(["人生苦短,我喜欢python", "人生漫长,不用python"])
# 也可以手动划分句子
cv2 = CountVectorizer()
data2 = cv2.fit_transform(["人生 苦短,我 喜欢 python", "人生漫长,不用 python"])
# 打印抽取结果
print(cv1.get_feature_names())
# 显示出现频率
print(data1.toarray())
print(cv2.get_feature_names())
print(data2.toarray())
return None
# 仅在主函数下运行,被import到其他函数是不会被调用的
if __name__ == "__main__":
countvec()
运行结果:
3. 中文的特征值化
def cutword():
"""
对中文文本进行分词
"""
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():
"""
中文特征值化
:return: None
"""
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
# 仅在主函数下运行,被import到其他函数是不会被调用的
if __name__ == "__main__":
hanzivec()
运行结果:
def tfidfvec():
"""
# tf-idf 反映词汇的重要性,词频在某文章越高且该词在所有文章中词频越低,重要性越高
:return: None
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
return None
# 仅在主函数下运行,被import到其他函数是不会被调用的
if __name__ == "__main__":
tfidfvec()
运行结果:
5. 归一化,标准差,缺失值处理
def mm():
"""
归一化处理
:return: NOne
"""
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():
"""
标准化缩放
:return:
"""
std = StandardScaler()
data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
return None
def im():
"""
缺失值处理
:return:NOne
"""
# NaN, nan
im = SimpleImputer(missing_values='NaN', strategy='mean', axis=0)
data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None