目录
人工智能,机器学习,深度学习
人工智能的研究领域也在不断扩大,上图展示了人工智能研究的各个分支,包括专家系统、机器学习、进化计算、模糊逻辑、计算机视觉、自然语言处理、推荐系统等。
机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测。机器学习可以解放生产力,解决专业问题,提供社会便利。应用场景有自然语言处理,计算机视觉,无人驾驶,推荐系统。
深度学习本来并不是一种独立的学习方法,其本身也会用到有监督和无监督的学习方法来训练深度神经网络。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。
数据来源与类型
数据来源
企业日益积累的大量数据(互联网公司更为显著),政府掌握的各种数据,科研机构的实验数据。
数据类型
机器学习的数据:文件csv
mysql存在性能瓶颈,读取速度慢,格式不太符合机器学习要求的格式。从而需要pandas,numpy。
离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他们的精确度。
连续型数据:变量可以在某个范围内取任一数,即变量的取值可以是连续的,如,长度、时间、质量值等,这类整数通常是非整数,含有小数部分。
常见数据集有 scikit-learn,Kaggle,UCI 。结构:特征值+目标值。例如房子面积,位置等等是特征,目标值,由特征去分类,最终得到的结果值,特征值影响目标值。
注:机器学习中,如果出现重复值,不需要去重处理。
数据的特征工程
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。简而言之,就是对特征进行处理的过程。
Scikit-learn
•Python语言的机器学习工具,Scikit-learn包括许多知名的机器学习算法的实现•Scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎。目前稳定版本0.18。
数据的特征抽取
机器学习首先将某些特征转化为相应的数据。再由数据去进行分类以及其他处理。比如对文章,新闻的特征抽取。
字典特征抽取
对字典数据进行特征值化,类:sklearn.feature_extraction.DictVectorizer。
#字典特征数据抽取
def dictvec():
"""
字典抽取数据
:return: None
"""
#实例化DictVectorizer类
dict=DictVectorizer(sparse=False)
#调用fit_transform 调用fit_transform方法输入数据并转换 返回的是sparse矩阵
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
['city=上海', 'city=北京', 'city=深圳', 'temperature']
[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 60.0}, {'city=深圳': 1.0, 'temperature': 30.0}]
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
文本特征抽取
文本特征抽取将文本转化为特征值。
CountVectorizer
返回值:转换之前数据格式
def countvec():
"""
对文本进行特征值化
:return:None
"""
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
对中文分词,需要使用jieba库
-
jieba:用于分词,类似于java的IK
jieba这个包,建议用 pip install jieba -i https://pypi.douban.com/simple/
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
TfidfVectorizer语法
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,
并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分
能力,适合用来分类。
返回值:转换之前数据格式
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
数据特征预处理
数值型数据:标准缩放:
1、归一化
通过对原始数据进行变换把数据映射到(默认为[0,1])之间。目的使一个特征不会对结果造成更多干扰。
•MinMaxScalar(feature_range=(0,1)…)
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
异常值对最小值和最大值影响较大 ,注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
2、标准化
通过对原始数据进行变换把数据变换到均值为0,方差为1范围内。
方差为0 ,表示特征一样,方差越大,数据越分散,越小,越集中。
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
def stand():
"""
标准化缩放
:return:
"""
std = StandardScaler()
data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
return None
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
3、缺失值
删除 | 如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列 |
插补 | 可以通过缺失值每行或者每列的平均值、中位数来填充 |
1、初始化Imputer,指定”缺失值”,指定填补策略,指定行或列
2、调用fit_transform
def im():
"""
缺失值处理
:return:NOne
"""
# NaN, nan
im = Imputer(missing_values='NaN', strategy='mean', axis=0)
data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None