机器学习的数据:文件csv
mysql: 1.性能瓶颈,读取速度; 2.格式不太符合机器学习要求的格式
pandas:读取工具 ,numpy:释放了GIL锁,真正的多线程
可用数据集:
1.数据集的组成
常用数据集的结构组成:
2.特征工程的定义
数据集结构:特征值和目标值,但是有些数据集可以没有目标值
DataFrame:缺失值,需进行数据转换
机器学习:重复值,需进行去重?
特征处理会影响最后数据的结果
特征工程在整个工程中的位置:
特征工程:将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性。
特征工程的意义:直接影响预测结果
Scikit-learn库:Python语言的机器学习算法
3.字典特征数据抽取
类:sklearn.feature_extraction.DictVectorizer(sparse=Ture,…)
sparse矩阵:节约内存,方便读取处理
字典数据抽取:把字典中一些类别数据,分别进行转换成特征,成为one-hot编码(以字符串为类别的转换为编码)
4.文本特征抽取以及中文问题
文本特征抽取:count
应用于文本分类,情感分析
中文语句分词需要借助“jieba”
5.tf-idf分析问题
tf:term frequency 词的频率
idf: inverse document frequency逆文档频率,值为:log(总文档数量/该词出现的文档数量)
tf * idf = 该词在文档中的重要性
6.特征预处理-归一化
通过特定的统计方法(数学方法),将数据转换为算法要求的格式
sklearn特征处理API : sklearn.preprocessing
sklearn归一化API:sklearn.preprocessing.MinMaxScaler
归一化的目的:使得每个特征对最终结果造成的影响相同,防止某个特征的值与其他特征值大很多而影响结果
问题:如果数据中异常点较多,会有什么影响?
异常点对最大值、最小值影响太大,会造成结果偏差,这也是归一化不可避免的缺点
7.特征处理-标准化
标准差的API: sklearn.preprocessing.StandardScaler
标准化总结以及缺失值处理:在已有样本足够多的情况下比较稳定,适合现在嘈杂大数据场景
如何处理缺失值:删除、插补(建议按特征(按列)填补)
如果使用pandas处理,可以使用dropna/fillna
数据当中的缺失值:np.nan
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
import jieba
import numpy as np
def dictvec():
'''
字典数据抽取,提取字典特征,变为one-hot编码
:return: None
'''
# 实例化
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():
"""
对文本进行特征值化,
1.统计所有文章中所有的词,重复的只看做一次
2.对每篇文章在词的列表中统计每个词出现的次数
3.单个字母不统计,因为单个字母没有分类依据
4.对于中文不支持抽取词和词组,需要空格分开,语句借助jieba分词
:return: None
"""
# 实例化
cv = CountVectorizer()
# data = cv.fit_transform(
# ["life is short, i like python","life is too long, i dislike python"])
data = cv.fit_transform(
["人生苦短,我喜欢python","人生漫长,我不喜欢python"])
print(cv.get_feature_names())
print(data.toarray())
return None
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
def tfidfvec():
"""
中文特征值化
得到的数值矩阵为特征值的重要性
: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
##########DAY03##########
def mm():
"""
归一化处理
:return: none
"""
mm = MinMaxScaler(feature_range=(2,3)) # feature_range规定了归一化的范围
data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
def stand():
"""
标准化缩放
:return: None
"""
std = StandardScaler()
data = std.fit_transform([[1.,-1.,3,],[2.,4.,2.],[4.,6.,-1,]])
print(data)
return None
def im():
"""
缺失值处理,在sklearn 0.22及以上版本中没有 Imputer,该方法未能实现
:return: None
"""
# nan NAN
im = SimpleImputer(missing_values='nan',strategy='mean',) # axis=0 表示列,axis=1 表示行
data = im.fit_transform([[1,2,1],[np.nan,3,5],[7,6,6]])
print(data)
return None
if __name__ == "__main__":
im()