机器学习的数据:文件csv
房子面积 | 房子位置 | 房子楼层 | 房子朝向 | 目标值 | |
数据1 | 80 | 9 | 3 | 0 | 80 |
数据2 | 100 | 9 | 5 | 1 | 120 |
数据3 | 80 | 10 | 3 | 0 | 100 |
房子面积、房子位置、房子楼层、房子朝向皆为特征值
注意:有些数据集可用没有目标值
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性
数据的特征抽取
下面用实例说明:
#特征抽取
#导入包
from sklearn.feature_extraction.text import CountVectorizer
#实例化CountVectorizer
vector=CountVectorizer()
#调用fit_transform进行并转换数据
res=vector.fit_transform(["Life is short,i like python","life is too long,i dislike python"])
#打印结果
print(vector.get_feature_names()) #打印特征值
print(res.toarray())
运行结果如下所示:
特征抽取对文本等数据进行特征值化
作用:对字典数据进行特征值化
类:sklearn.feature_extraction.CountVectorizer
DictVectorizer(sparse=True,...)
X:字典或者包含字典的迭代器
返回值:返回sparse矩阵
X:array数组或者sparse矩阵
返回值:转换之前数据格式
返回类别的名称
按照原先的标准转换
实例说明:
from sklearn.feature_extraction import DictVectorizer
def dictverc():
"""
字典数据抽取
"""
# 实例化
dict = DictVectorizer()
# 调用fit_transform 返回sparse距阵
data = dict.fit_transform(
[{'city': u'beijing', 'temperature': 100}, {'city': u'shanghai', 'temperature': 90}, {'city':u 'qingdao', 'temperature': 80}]);
# 输出
#print(data)
print(dict.get_feature_names())
print(dict.inverse_transform(data))
if __name__=="__main":
dictverc()
字典数据抽取:把字典中一些类别数据,分别进行转换成特征
作用:对文本数据进行特征值化
类:sklearn.feature_extraction.text.CountVectorizer
CountVectorizer()
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
X:array数组或者sparse矩阵
返回值:转换之前数据形式
返回值:单词列表
代码实例如下:
from sklearn.feature_extraction.text import CountVectorizer
def countvec():
"""
对文本进行特征值化
:return: None
"""
cv=CountVectorizer()
data=cv.fit_transform({"人生苦短,我喜欢python","人生漫长,不用python"})
print(data.toarray())
return None
if __name__=="__main":
countvec()
jieba分词
import jieba
返回值:词语生成器
代码实例说明
from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cutword():
con1=jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2=jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3=jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。 了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
#转换成列表
content1=list(con1)
content2 = list(con2)
content3 = list(con3)
#把列表转换成字符串
c1= ' '.join(con1)
c2 = ' '.join(con2)
c3 = ' '.join(con3)
return c1,c2,c3
def hanzivec():
"""
中文特征值化:
:return:
"""
c1,c2,c3=cutword()
print(c1,c2,c3)
cv = CountVectorizer()
data = cv.fit_transform([c1,c2,c3])
# data = cv.fit_transform({"人生苦短,我喜欢python", "人生漫长,不用python"})
print(cv.get_feature_names())
print(data.toarray())
return None
if __name__=="__main":
hanzivec()
单个词不会被统计在内
Tf:term frequency:词的频率 出现的次数
idf:inverse document frequency 逆文档频率 log(总文档数量/该词出现的文档数)
log(数值):输入的数值越小,结果越小
反应的是重要性的程度
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其他一份文件的重要程度。
类:sklearn.feature_extraction.text.TfidfVectorizer
返回词的权重矩阵
X:文本或者包含文本字符串的可迭代对象
返回值:返回sparse矩阵
X:array数组或者sparse矩阵
返回值:转换之前数据形式
返回值:单词列表
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cutword():
con1=jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2=jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3=jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。 了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
#转换成列表
content1=list(con1)
content2 = list(con2)
content3 = list(con3)
#把列表转换成字符串
c1= ' '.join(con1)
c2 = ' '.join(con2)
c3 = ' '.join(con3)
return c1,c2,c3
def tfidfvec():
"""
中文特征值化
:return: None
"""
c1, c2, c3 = cutword()
print(c1, c2, c3)
tf= TfidfVectorizer
data = tf.fit_transform([c1,c2,c3])
print(data)
return None
if __name__=="__main":
tfidfvec()
运行结果如下所示: