机器学习基本知识
机器学习的步骤
相关性分析
使用python进行线性回归分析
逻辑回归与三种数据类型
使用python实现逻辑回归
线性回归和逻辑回归的区别
机器学习算法和机器学习模型的区别
总结
相关性分析
线性回归
逻辑回归
python逻辑回归
数据类型
线性回归和逻辑回归区别
一、机器学习基本知识
1、什么是机器学习?
机器学习是通过数据训练,使用算法挖掘事物背后隐藏的规律和本质,得到模型。
“Machine Learning studies computer algorithms for learning to do stuff ”
2、人工智能,机器学习,深度学习之间的关系
通过下图可以了解:人工智能,机器学习,深度学习之间的关系。人工智能应用范围很广,机器学习是实现人工智能的一种技术,深度学习是机器学习中的一种算法。
3、什么是特征,什么是标签?
(1)特征:数据的物理属性(输入),数据的这些特征可以代表数据的特点,比如橘子的颜色,尺寸等,比如音乐的强度,歌曲时长,节奏等
(2)标签:对数据的预测结果,输出的(结果或目的),比如橘子甜还是不甜。或者类别,喜欢或者不喜欢,代表数据的预测结果
4、机器学习的模型
机器学习算法(输入训练数据)——结果(输出)
5、Python的机器学习包:sklearn,使用conda 安装scikit-learn
正确学习路线:当我们碰到某个机器学习算法,比如线性回归算法,通过了解案例文档包,带着目的学习并使用这个包。
二、机器学习的步骤
1、提出问题
一切机器学习的目标都是为了解决我们生活和工作中遇到的问题。比如我们我们想知道喜欢听a类音乐的的用户,还喜欢什么什么类的音乐,明确的问题,为机器学习提供了目标。
2、理解数据
1)采集数据,根据研究问题采集相关数据
2)导入数据,分析的数据中可能在网络中,数据库中,excel中,比如导入python中。
3)查看数据集的信息:包括描述统计信息,从整体上理解信息。
3、数据清洗
数据清洗也叫数据预处理,对数据进行整容。从数据集中提出我们想要特征的数据的信息
4、构建模型
用训练模型构建模型,将提取的特质放入机器学习算法中来构建模型,机器学习最核心的是机器学习算法。
5、评估模型
对模型进行评估:通过测试数据评估模型的准确性,看看模型的预测效果如何,得出预测准确率。
总结:机器学习算法是从普通算法演化过来的,通过自动从提供的数据中学习,让程序变得更聪明。从数据中随机抽取一些样本,样本在机器学子中即训练数据,模型学习越多训练数据就会越准确,并且在作出错误的预测的时候可以自行修正。我们可以使用同样的机器学习算法去训练不同的模型,这就是机器学习。
三、相关性分析
1、用散点图展现2个数据间的关系(散点图可以看出是否相关)
学习时间是特征,分数是标签。
2、三种线性相关性
正线性相关:直线朝上
负线性相关:直线朝下
不是线性相关:随机,没有线性相关,有可能有其他相关关系。
3、如何衡量相关性程度——协方差、相关系数
1)协方差的功能
协方差的正负可以反应数据相关性方向
协方差表示两个变量相关性程度
2)协方差的缺点:
被变量的变化幅度影响
4、相关系数:
1)消除变量变化幅度对协方差的影响,标准后的协方差,反应两个标量每单位变化的相似程度。r也称之为皮尔逊积矩相关系数。标准差是衡量数据集波动大小的统计量。
计算公式:相关系数 r=X和Y的协方差/(X的标准差*Y的标准差)
2)相关系数的功能
1)范围是-1到1变化,三个极值-1,1,0,反映两个变量的相关性方向
2)值的大小表示两个变量每单位的相关性程度
5、相关系数分类:
0.6~~0.1强相关
0.3~~0.6中等程度相关
0~~0.3 弱相关
6、如何用python如何计算相关系数
相关系数矩阵
相关系数接近1 ,学习时间和分数之间有很强的正线性相关即高度相关。
四、用python进行 简单回归分析
1、什么是最佳拟合线
在散点图上画一条穿过这些点的直线,使直线尽量接近这些数据点,这条直线就是最佳拟合线。(作为零散分布的原始数据的代表,距离各点(数据)之和最小的直线)
2、回归方程 y=a+bx 一元直线方程
b是回归系数(斜率),a是截距,x是学习时间,y是考试分数。
最小二乘法可以使误差平方和最小。
3、如何用python求简单线性回归
建立训练数据和测试数据
画出训练数据和测试数据散点图
4、使用机械学习包用python训练模型
输入:训练数据的标签(学习时间),特征(分数)
模型:线性回顾
输出:回归结果
5、使用python画出最佳拟合线
6、如何评估模型精确度?
1)在比较多个数据集的拟合情况时,误差平方和会因为数据集点的多少而影响 评价的结果。
2)决定系数R平方与训练点点的数量无关,不受数据点数量多少的影响。
功能:评估线性回顾模型的精确度,值的大小反应模型精准度。
7、如何用python求决定系数R平方(评估模型精准度)
通过score()函数对模型进行评估,得到决定系数
最后绘制散点图查看训练数据、测试数据与最佳拟合线之间的关系.
五、逻辑回归和逻辑函数
1、机器学习
输入 训练数据(特征、标签)
机器学习算法
输出:分类结果(喜欢或不喜欢)
2、机器学习模型是如何起作用?
对分类问题,定义一个决策面,一侧预测的是喜欢,一侧是不喜欢的。
机器模型的准确率:正确率 模型预测的结果正确分类的数据数占所有数据的比例
3、什么是逻辑回归
逻辑回归是一个分类算法,用于二分分类的算法,指的是分类结果只有2个标签,在这种二分分类问题就可以使用逻辑回归算法。
为什么不使用线性回归?因为线性回归无法解决分类问题,线性回归预测的值是一个连续数据,分类中预测值是一个离散数据,比如0或者1。
4、逻辑函数
逻辑函数是一个S型曲线,y的值是0-1之间变化,和垂直轴相交在0.5处。逻辑回归的逻辑函数参数z是一个线性回归函数。
逻辑函数的值:
逻辑函数是一个S型曲线,y的值是0-1之间变化,和垂直轴相交在0.5处。逻辑回归的逻辑函数参数z是一个线性回归函数。
将训练数据的特征和标签转化为一个决策面
决策面:如果逻辑函数得到的概率值y>=0.5 特征=1,如果y<0.5 特征=0
5、三种数据类型
1)、数值数据(定量数据)温度,金钱,又分为2种离散数据和连续数据。
离散数据只能包含特定的值,数据的取值是不连续的,比如抛硬币的数据就是离散数据,结果正面或者反面。连续数据是某个范围内 可以取任何数值,比如时间就是一个连续数据,可以进行无限分割,平滑的曲线。
2)、分类数据(定性数据)
对数据进行描述的信息,无法用数字进行量化,比如性别分为男性,女性。有时候也有数据表示,但是数据不具备数学意义,不可以进行运算。机器学习中通常用数值表示分类,因为算法中传入的值同样要求是数值型,用数值来对应分类,比如0、1,比如有序分类,比如1-5星。
3)、时间序列数据
长时间重复测量而获得的观测数据的集合,时间序列是在一段时间内定期收集的数据序列,例如股票每天的股价,可以说明时间的顺序。
六、使用python实现逻辑回归
1、建立数据集
2、提取数据集的特征和标签并绘制散点图
3、使用机器学习建立训练数据和测试数据 随机分配
4、绘制训练和测试数据散点图
5、训练模型 使用训练数据
6、计算模型的准确率 使用测试数据
7、使用数据验证模型准确率与预测概率值 回归方程
七、线性回归和逻辑回归的区别
1、输出数据类型不同,逻辑回顾输出的是是离散数据(分类标签),线性回归是连续数据类型。比如通过学习时间预测考试分数。
2、想得到什么:逻辑回归得到一个决策面,用于对数据进行对数据分类,回
归算法得到最优拟合线,可以更好接近数据中的各个点。逻辑回归本质上是一个分类算法。
3、评估指标:在逻辑回归中我们使用正确率作为评估指标,即正确比率
线性回归中使用决定系数R平方,表示有多少百分比的y波动被回归线所描述。
八、机器学习算法和机器学习模型的区别
机器学习算法是处理某一类型问题的通用算法框架
机器学习模型=机器学习算法+训练数据 ,一个专门用于处理某一类问题的模型。比如使用线性回归模型或逻辑回归模型。
九、总结
1、机器学习基本知识:特征和标签
2、训练数据和测试数据
3、线性回归问题和分类问题:决定系数R平方和决策面、正确率
4、逻辑回归:用于二分分类问题,逻辑函数
5、如何用python实现线性回归和逻辑回归
6、三种数据类型
7、逻辑分类和线性回归的区别
8、机器学习算法和机器学习模型的区别
线性回归代码部分:
1)理解数据 原始数据集 有序字典排序
from collections import OrderedDict
import pandas as pd
examDict={
'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,
2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
'分数': [10, 22, 13, 43, 20, 22, 33, 50, 62,
48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]
}
examOrderDict=OrderedDict(examDict)
examDf=pd.DataFrame(examOrderDict)
2)画出数据集散点图:
#提取数据的特征和标签 学习时间是特征 标签是分数
#特征features
exam_X=examDf.loc[:,'学习时间']
#标签labes
exam_y=examDf.loc[:,'分数']
#绘制散点图 使用绘图包matplotlib
import matplotlib.pyplot as plt
#散点图
plt.scatter(exam_X, exam_y, color="b", label="exam data")
#添加图标标签
plt.xlabel("Hours")
plt.ylabel("Score")
#显示图像
plt.show()
3)计算相关系数
#相关系数:corr返回结果是一个数据框,存放的是相关系数矩阵
rDf=examDf.corr()
print('相关系数矩阵:')
rDf
4)建立训练数据和测试数据
#特征features _X表示标签
exam_X=examDf.loc[:,'学习时间']
#标签labes _y表示标签
exam_y=examDf.loc[:,'分数']
from sklearn.model_selection import train_test_split
#建立训练数据和测试数据 表示训练和测试数据的标签和特征
X_train , X_test , y_train , y_test = train_test_split(exam_X ,
exam_y ,
train_size = 0.8)
#输出数据大小
print('原始数据特征:',exam_X.shape ,
',训练数据特征:', X_train.shape ,
',测试数据特征:',X_test.shape )
print('原始数据标签:',exam_y.shape ,
'训练数据标签:', y_train.shape ,
'测试数据标签:' ,y_test.shape)
5)训练模型(使用训练数据)
X_train=X_train.values.reshape(-1,1)
X_test=X_test.values.reshape(-1,1)
#第1步:导入线性回归
from sklearn.linear_model import LinearRegression
# 第2步:创建模型:线性回归
model = LinearRegression()
#第3步:训练模型
model.fit(X_train , y_train)
7)计算最佳拟合线方程
#截距
a=model.intercept_
#回归系数
b=model.coef_
print('最佳拟合线:截距a=',a,',回归系数b=',b)
8) 画出最佳拟合线 训练数据
#绘散点图 并画出最佳拟合线
import matplotlib.pyplot as plt
#训练数据散点图
plt.scatter(X_train, y_train, color='blue', label="train data")
#训练数据的预测值
y_train_pred = model.predict(X_train)
#绘制最佳拟合线
plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")
#添加图标标签
plt.legend(loc=2)
plt.xlabel("Hours")
plt.ylabel("Score")
#显示图像
plt.show()
9)模型评估(使用测试数据)
#线性回归的scroe方法得到的是决定系数R平方
#评估模型:决定系数R平方
model.score(X_test , y_test)
10)画出最后的最佳拟合线(训练数据和测试数据)
#导入绘图包
import matplotlib.pyplot as plt
plt.scatter(X_train, y_train, color='blue', label="train data")
#最佳拟合线训练数据的预测值
y_train_pred = model.predict(X_train)
#绘制最佳拟合线:标签用的是训练数据的预测值y_train_pred
plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")
plt.scatter(X_test, y_test, color='red', label="test data")
#添加图标标签
plt.legend(loc=2)
plt.xlabel("Hours")
plt.ylabel("Score")
#显示图像
plt.show()
逻辑回归代码部分
1)导入数据集
#导入pandas和有序字典
from collections import OrderedDict
import pandas as pd
#建立数据集 有序字典对数据集进行排序
examDict={
'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,
2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
'通过考试':[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]
}
examOrderDict=OrderedDict(examDict)
examDf=pd.DataFrame(examOrderDict)
examDf.head(10)
2)提取特征和标签
#提取数据集对特征和标签
#特征features
exam_X=examDf.loc[:,'学习时间']
#标签labes
exam_y=examDf.loc[:,'通过考试']
import matplotlib.pyplot as plt
#散点图 通过散点图看看两个变量的分布情况
plt.scatter(exam_X, exam_y, color="b", label="exam data")
#添加图标标签
plt.xlabel("Hours")
plt.ylabel("Pass")
#显示图像
plt.show()
3)建立训练数据和测试数据
使用机器学习包 建立训练和测试数据
#train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取训练数据(train)和测试数据(test)
from sklearn.model_selection import train_test_split
#建立训练数据和测试数据
X_train , X_test , y_train , y_test = train_test_split(exam_X ,
exam_y ,
train_size = .8)
#输出数据大小
print('原始数据特征:',exam_X.shape ,
',训练数据特征:', X_train.shape ,
',测试数据特征:',X_test.shape )
print('原始数据标签:',exam_y.shape ,
'训练数据标签:', y_train.shape ,
'测试数据标签:' ,y_test.shape)
4)绘制训练和测试数据散点图
#绘制训练数据和测试数据的散点图
import matplotlib.pyplot as plt
#散点图
plt.scatter(X_train, y_train, color="blue", label="train data")
plt.scatter(X_test, y_test, color="red", label="test data")
#添加图标标签
plt.legend(loc=2)
plt.xlabel("Hours")
plt.ylabel("Pass")
#显示图像
plt.show()
5)训练模型
#使用训练数据 训练模型 需要先将数据转化为数组 多行一列的数组
#将训练数据特征转换成二维数组X行*1列
X_train=X_train.values.reshape(-1,1)
#将测试数据特征转换成二维数组X行*1列
X_test=X_test.values.reshape(-1,1)
#导入逻辑回归包
from sklearn.linear_model import LogisticRegression
# 创建模型:逻辑回归
model = LogisticRegression()
#训练模型
model.fit(X_train , y_train)
6)评估模型(使用训练数据评估模型准确率)
#评估模型:准确率 score方法计算出的是正确率 测试数据的特征和标签
model.score(X_test , y_test)
7)决策面
#获取概率值第1个值是标签为0的概率值,第2个值是标签为1的概率值,两个值的和=1
#决策面 概率大于0.5等于标签为1的分类
#model.predict_proba(4)
model.predict_proba([[4]])
8)预测数据
#预测数据:使用模型的predict方法可以进行预测。这里我们输入学生的特征学习时间4小时,模型返回结果标签是0,
#表示预测该学生通过考试。#决策面 概率大于0.5等于标签为1的分类
pred=model.predict([[4]])
print(pred)
9)计算预测概率值 回归方程
第1步:得到回归方程的z值
#回归方程:z= + x
#截距
a=model.intercept_
#回归系数
b=model.coef_
x=4
z=a+b*x
#第2步:将z值带入逻辑回归函数中,得到概率值
y_pred=1/(1+np.exp(-z))
print('预测的概率值:',y_pred)