机器学习拓展知识
拓展机器学习的原理与背景, 线性回归、逻辑回归的重难点讲解以及代码复现, 机器学习的基本pipeline, 机器学习模型评价指标探讨。
目录
1.背景与原理介绍
机器学习简介,机器学习的原理与背景。
2.回归与分类详解
线性回归、逻辑回归的重难点讲解以及代码复现。
3.机器学习评价
机器学习的基本pipeline以及机器学习模型评价指标探讨。
1.背景与原理介绍
分类
- 监督
- 无监督
- 强化
监督学习
无监督学习
强化学习
2.回归和分类详解
线性回归
多元线性回归
多源线性回归解析解 θ
逻辑回归
3.机器学习评价
模型过拟合与正则化
预防过拟合
多项式回归
机器学习pipeline
- 开发与训练
- 模型
- 部署
数据集划分
训练集、验证集、测试集
过拟合的判定
机器学习评价体系(分类问题)
Accuracy在数据不平衡时参考意义不大
主要看F1_Score
代码
线性回归
from numpy import *
import matplotlib.pylab as plt
def loadDataSet(fileName):
dataMat = []
labelMat = []
fr = open(fileName)
for line in fr.readlines():
lineArr = []
curLine = line.strip().split('\t')
for i in range(2):
lineArr.append(float(curLine[i]))
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat,labelMat
def standRegres(xArr,yArr):
xMat = mat(xArr)
yMat = mat(yArr).T
xTx = xMat.T * xMat
if linalg.det(xTx) == 0:
return
ws = xTx.I * (xMat.T * yMat)
return ws
def regression1():
xArr, yArr = loadDataSet("./data/data.txt")
xMat = mat(xArr)
yMat = mat(yArr)
ws = standRegres(xArr, yArr)
fig = plt.figure()
ax = fig.add_subplot(111) #add_subplot(349)函数的参数的意思是,将画布分成3行4列图像画在从左到右从上到下第9块
ax.scatter(xMat[:, 1].flatten().tolist(), yMat.T[:, 0].flatten().A[0].tolist()) #scatter 的x是xMat中的第二列,y是yMat的第一列
xCopy = xMat.copy()
xCopy.sort(0)
yHat = xCopy * ws
ax.plot(xCopy[:, 1], yHat)
plt.show()
if __name__ == "__main__":
regression1()
逻辑回归
from numpy import *
import matplotlib.pylab as plt
# 解析数据
def loadDataSet(file_name):
dataMat = []
labelMat = []
fr = open(file_name)
for line in fr.readlines():
curLine = line.strip().split()
dataMat.append([1.0,float(curLine[0]),float(curLine[1])])
labelMat.append(int(curLine[2]))
return dataMat, labelMat
def sigmoid(inX):
return 1.0 / (1 + exp(-inX))
def stocGradAscent1(dataMatrix, classLabels, numIter=500):
m,n = shape(dataMatrix)
weights = ones(n) # 创建与列数相同的矩阵的系数矩阵,所有的元素都是1
# 随机梯度, 循环150,观察是否收敛
alpha = 0.001
for j in range(numIter):
# [0, 1, 2 .. m-1]
dataIndex = range(m)
for i in range(m):
randIndex = int(random.uniform(0,len(dataIndex)))
h = sigmoid(sum(dataMatrix[dataIndex[randIndex]]*weights))
error = classLabels[dataIndex[randIndex]] - h
weights = weights + alpha * error * dataMatrix[dataIndex[randIndex]]
# del(dataIndex[randIndex])
return weights
def plotBestFit(dataArr, labelMat, weights):
n = shape(dataArr)[0]
xcord1 = [];
ycord1 = []
xcord2 = [];
ycord2 = []
for i in range(n):
if int(labelMat[i]) == 1:
xcord1.append(dataArr[i, 1]);
ycord1.append(dataArr[i, 2])
else:
xcord2.append(dataArr[i, 1]);
ycord2.append(dataArr[i, 2])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
ax.scatter(xcord2, ycord2, s=30, c='green')
x = arange(-3.0, 3.0, 0.1)
y = (-weights[0] - weights[1] * x) / weights[2]
ax.plot(x, y)
plt.xlabel('X');
plt.ylabel('Y')
plt.show()
def testLR():
# 1.收集并准备数据
dataMat, labelMat = loadDataSet("data/data2.txt")
dataArr = array(dataMat)
# print dataArr
weights = stocGradAscent1(dataArr, labelMat)
# 数据可视化
plotBestFit(dataArr, labelMat, weights)
if __name__ == '__main__':
testLR()