数据分析与机器学习理论知识

目录

人工智能及其理论:

人工智能是什么:使计算机胜任人类智能

Artificial intelligence is a branch of computer science,It is a new technical science, which researches and develops theories and technologies for simulating and extending human intelligence.It consists of different fields, such as machine learning, computer vision and so on
人工智能是计算机科学的一个分支,他是一个新兴的科学,用于研究和开发 模仿和扩展人类智能的 理论方法
它由不同的领域组成,如机器学习,计算机视觉等等

人工智能领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等

总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作


机器学习:人工智能的一个分支

Machine learning is a branch of artificial intelligence,The machine simulates the learning process of human beings. By feeding a large amount of data, the machine continuously improves the algorithm and produces a model that can predict the results。It is the core of artificial intelligence and the fundamental way to make computers intelligent.
机器学习是人工智能的一个分支,机器模拟人的学习过程,通过输入大量数据,机器不断自行改进算法,得出能预测结果的模型。
它是人工智能的核心,是使计算机具有智能的根本途径。

专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。



数据集、特征工程

什么是数据集?
由特征值和目标值构成的集合。



什么是特征工程?
将原始数据转换为更好地代表预测模型的潜在问题的特征 的过程,从而提高了对未知数据模型的准确性。


特征工程包括什么?
特征抽取、特征预处理、特征降维。

特征提取:将任意数据转换为可用于机器学习的数字特征。例如字典型特征提取、文本型特征提取。

特征预处理:预先处理,包括归一化标准化、异常样本清洗、样本数据不平衡问题处理。

特征降维:降低的对象是多维数组。降低的是特征的个数,得到一组“不相关”的主变量的过程


机器学习四大块:
通过有无标签分类:有监督学习、无监督学习、半监督学习。

与监督学习相比,无监督学习的训练集中没有人为的标注的结果,在非监督的学习过程中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。



通过功能性分类:分类、回归、聚类、降维

给定一个样本特征 ,希望预测其对应的属性值 , 如果是离散的, 那么这就是一个分类问题,反之,如果 是连续的实数, 这就是一个回归问题。

给定一组样本特征 , 我们没有对应的属性值 , 而是想发掘这组样本在多维空间的分布, 比如分析哪些样本靠的更近,哪些样本之间离得很远, 这就是属于聚类问题。

如果我们想用维数更低的子空间来表示原来高维的特征空间, 那么这就是降维问题。



分类、回归、聚类、降维的代表性算法分别有什么?

1、分类:

朴素贝叶斯

贝叶斯分类法是基于贝叶斯公式(先验概率和后验概率的关系)的统计学分类方法。

它通过预测一个给定的元组属于一个特定类的概率,来进行分类。

logistic回归(逻辑回归)

logistic回归得出预测值后,根据预测值大小进行分类。(通常是二分类)

决策树

基于树的结构来进行决策

KNN算法

支持向量机(SVM)算法



2、回归

线性回归

用直线进行拟合。

逻辑回归

用logistic函数拟合。



3、聚类

K-means算法


4、降维

主成分分析法



knn算法和kmeans算法的区别

knn算法是监督学习算法,处理分类问题classification;

kneans算法是无监督学习算法,处理聚类问题;



机器学习开发流程:

数据预处理、特征工程、机器学习、模型评估



机器学习时用到的工具和库

科学计算库使用numpy;

数据集,机器学习阶段用sklearn数据集;

pandas数据预处理和数据清洗;

特征工程使用sklearn。


深度学习(人工神经网络):机器学习领域中一个新的研究方向,一个复杂的机器学习算法。

Deep learning is a new research direction in the field of machine learning. It is a complex machine learning algorithm.
Deep learning studies the internal laws and presentation levels of sample data, and its ultimate goal is to enable machines to have the ability to analyze and learn like humans, and to recognize data such as text, images and sounds.The concept of deep learning originates from the research of artificial neural network
深度学习 学习样本数据的内在规律和表示层次,它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习的概念源于人工神经网络的研究

深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。研究深度学习的动机在于建立模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本等。

深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。





机器学习实际库

数据挖掘:
基于Scrapy框架对二手车之家进行数据挖掘。


数据清理:
使用jupyter notes对数据进行一个清理,包括删除有空值的行,删除重复值。

科学计算领域受欢迎的三个库:

NumPy系统:numpy是一个高性能的多维数组的计算库

Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵。

一个用python实现的科学计算,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;
3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。

numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
Numpy底层使用C语言编写,数组中直接存储对象,而不是存储对象指针,所以其运算效率远高于纯Python代码。



Matplotlib : Python 的绘图库。

它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,

直方图,功率谱,条形图,错误图,散点图等。


Matplotlib.pyplot 包含一系列类似 MATLAB 中绘图函数的相关函数。

每个 Matplotlib.pyplot 中的函数会对当前的图像进行一些修改,例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…… Matplotlib.pyplot 会自动记住当前的图像和绘图区域,因此这些函数会直接作用在当前的图像上。


plt.plot() 绘制线型图、 subplot 一副图中生成多个子图、scatter生成散点图



子图

figure() 函数会产生一个指定编号为 num 的图:

plt.figure(num)

这里,figure(1) 其实是可以省略的,因为默认情况下 plt 会自动产生一幅图像。

使用 subplot 可以在一副图中生成多个子图,其参数为:

plt.subplot(numrows, numcols, fignum)

当 numrows * numcols < 10 时,中间的逗号可以省略,因此 plt.subplot(211) 就相当于 plt.subplot(2,1,1)。





Scipy:SciPy是构建在numpy的基础之上,它提供了许多的操作numpy的数组的函数。

SciPy是一款方便、易于使用、专为科学和工程设计的python工具包,它包括了统计、优化、整合以及线性代数模块、傅里叶变换、信号和图像图例,常微分方差的求解等

是一个用于数学、科学、工程领域的常用软件包,它用于有效计算Numpy矩阵
可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。
  Scipy是由针对特定任务的子模块组成:


其他库、工具包

pandas :基于NumPy 的一种工具

Pandas 是python的一个数据分析包,该工具是为了解决数据分析任务而创建的。
Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

Series:一维数组,与Numpy中的一维array类似。

二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。
如一列excel信息。


DataFrame:二维的表格型数据结构。可以将DataFrame理解为Series的容器。

很多功能与R中的data.frame类似。
如整个excel表格文件。

绘制箱型图:boxplot
data['Price']=data['Price'].astype(float)
data.boxplot(column='Price')

在这里插入图片描述


dropna():滤除缺失数据
df.dropna(axis=0, how='any', inplace=True)

axis:0-行操作(默认),1-列操作
how:any-只要有空值就删除(默认),all-全部为空值才删除
inplace:False-返回新的数据集(默认),True-在原数据集上操作


drop_duplicates:删除重值

这个drop_duplicate方法是对DataFrame格式的数据,去除特定列下面的重复行。返回DataFrame格式的数据。

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

subset : column label or sequence of labels, optional
用来指定特定的列,默认所有列
keep : {‘first’, ‘last’, False}, default ‘first’
删除重复项并保留第一次出现的项
inplace : boolean, default False
是直接在原来数据上修改还是保留一个副本



sklearn:机器学习中常用第三方模块,对常用的机器学习方法进行了封装,建立NumPy、Scipy、MatPlotLib之上

包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。当我们面临机器学习问题时,便可根据下图来选择相应的方法。Sklearn具有以下特点:

简单高效的数据挖掘和数据分析工具,让每个人能够在复杂环境中重复使用
建立NumPy、Scipy、MatPlotLib之上



LabelEncoder函数:对特征进行硬编码。编码为0~n-1(n为种类数)
from sklearn.preprocessing import LabelEncoder

train_data.Name = LabelEncoder().fit_transform(train_data.Name.values)





KNeighborsClassifier:实现K近邻算法的一个类,一般都使用欧式距离进行测量
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 15 18:01:45 2019
@author: Administrator
"""
 
import numpy as np
from sklearn import neighbors

train_data = pd.read_csv(r'C:\Users\15650\Desktop\tz_test.csv')
data = train_data.Price_level  #样本结果
label = train_data.drop(['Price_level'], axis=1) #样本特征集
 
estimator = neighbors.KNeighborsClassifier()  # 取得knn分类器
 

estimator.fit(data, labels)  # 导入数据进行训练
 
print('预测类型为:', knn.predict([[0.8, 1, 1, 1,5,6,7,8,9,10]]))



train_test_split():将原始数据按照比例分割为“测试集”和“训练集”,

在机器学习中,我们通常将原始数据按照比例分割为“测试集”和“训练集”,
从 sklearn.model_selection 中调用train_test_split 函数

y = train_data.Price_level  #样本结果
X = train_data.drop(['Price_level'], axis=1) #样本特征集

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.25,stratify=y)



X_train,y_train:得到的训练数据。

X_test, y_test:得到的测试数据。

简单用法如下:

from sklearn.model_selection import train_test_split

X_train,X_test, y_train, y_test 
= train_test_split( train_data , train_target , test_size=0.4 , random_state=0 , stratify=y_train )

1、train_data:所要划分的样本特征集

2、train_target:所要划分的样本结果

3、test_size:样本占比,如果是整数的话就是样本的数量
可以为浮点、整数或None,默认为None

①若为浮点时,表示测试集占总样本的百分比
②若为整数时,表示测试样本样本数
③若为None时,test size自动设置成0.25

4、stratify是为了保持split前类的分布。
比如有100个数据,80个属于A类,20个属于B类。如果train_test_split(… test_size=0.25, stratify = y_all), 那么split之后数据如下:
training: 75个数据,其中60个属于A类,15个属于B类。
testing: 25个数据,其中20个属于A类,5个属于B类。

将stratify=X就是按照X中的比例分配
将stratify=y就是按照y中的比例分配

用了stratify参数,training集和testing集的类的比例是 A:B= 4:1,等同于split前的比例(80:20)。通常在这种类分布不平衡的情况下会用到stratify。

5、random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数




estimator的score方法:它提供了一个缺省的评估法则来评估模型




Jupyter Notebook :本质是一个 Web 应用程序,便于创建和共享程序文档

支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 [1] 。



Anaconda (开源的Python包管理器):包括Python以及一大堆安装好的工具包,比如:numpy、pandas等





机器学习算法

KNN(K近邻算法):最简单的分类算法

K近邻(k-Nearest Neighbor,KNN)分类算法的核心思想是如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
KNN算法可用于多分类,KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,作为预测值。

KNeighborsClassifier在scikit-learn 在sklearn.neighbors包之中。KNeighborsClassifier使用很简单,三步:

1)创建KNeighborsClassifier对象,
2)调用fit函数,
3)调用predict函数进行预测。


y = train_data.Price_level  #样本结果
X = train_data.drop(['Price_level'], axis=1) #样本特征集

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.25,stratify=y)

estimator = KNeighborsClassifier(n_neighbors=7)  #默认为5
predict_model = estimator.fit(X, y)





KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹了。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。那么最近的邻居又是怎么回事呢?其实啊,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。听起来有点绕,还是看看图吧。

在这里插入图片描述
图中绿色的点就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个例子中是蓝色三角形多一些,新来的绿色点就归类到蓝三角了。




但是,当K=5的时候,判定就变成不一样了。这次变成红圆多一些,所以新来的绿点被归类成红圆。从这个例子中,我们就能看得出K的取值是很重要的。

明白了大概原理后,我们就来说一说细节的东西吧,主要有两个,K值的选取和点距离的计算。




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值