机器学习拓展知识

拓展机器学习的原理与背景, 线性回归、逻辑回归的重难点讲解以及代码复现, 机器学习的基本pipeline, 机器学习模型评价指标探讨。

目录

1.背景与原理介绍

机器学习简介,机器学习的原理与背景。

2.回归与分类详解

线性回归、逻辑回归的重难点讲解以及代码复现。

3.机器学习评价

机器学习的基本pipeline以及机器学习模型评价指标探讨。

1.背景与原理介绍

分类

  • 监督
  • 无监督
  • 强化

image.png

监督学习

image.png
image.png

无监督学习

image.pngimage.png

强化学习

image.png

2.回归和分类详解

线性回归

image.png
image.png

多元线性回归

image.png
image.png

多源线性回归解析解 θ

image.png

逻辑回归

image.png
image.png
image.png

3.机器学习评价

模型过拟合与正则化

预防过拟合

image.png

多项式回归

image.png

机器学习pipeline

  1. 开发与训练
  2. 模型
  3. 部署

image.png

数据集划分

训练集、验证集、测试集

image.png

过拟合的判定

Error曲线不降反增
image.png

机器学习评价体系(分类问题)

Accuracy在数据不平衡时参考意义不大
主要看F1_Score
image.png

代码

线性回归

  1. from numpy import *
  2. import matplotlib.pylab as plt
  3. def loadDataSet(fileName):
  4. dataMat = []
  5. labelMat = []
  6. fr = open(fileName)
  7. for line in fr.readlines():
  8. lineArr = []
  9. curLine = line.strip().split('\t')
  10. for i in range(2):
  11. lineArr.append(float(curLine[i]))
  12. dataMat.append(lineArr)
  13. labelMat.append(float(curLine[-1]))
  14. return dataMat,labelMat
  15. def standRegres(xArr,yArr):
  16. xMat = mat(xArr)
  17. yMat = mat(yArr).T
  18. xTx = xMat.T * xMat
  19. if linalg.det(xTx) == 0:
  20. return
  21. ws = xTx.I * (xMat.T * yMat)
  22. return ws
  23. def regression1():
  24. xArr, yArr = loadDataSet("./data/data.txt")
  25. xMat = mat(xArr)
  26. yMat = mat(yArr)
  27. ws = standRegres(xArr, yArr)
  28. fig = plt.figure()
  29. ax = fig.add_subplot(111) #add_subplot(349)函数的参数的意思是,将画布分成3行4列图像画在从左到右从上到下第9块
  30. ax.scatter(xMat[:, 1].flatten().tolist(), yMat.T[:, 0].flatten().A[0].tolist()) #scatter 的x是xMat中的第二列,y是yMat的第一列
  31. xCopy = xMat.copy()
  32. xCopy.sort(0)
  33. yHat = xCopy * ws
  34. ax.plot(xCopy[:, 1], yHat)
  35. plt.show()
  36. if __name__ == "__main__":
  37. regression1()

image.png

逻辑回归

  1. from numpy import *
  2. import matplotlib.pylab as plt
  3. # 解析数据
  4. def loadDataSet(file_name):
  5. dataMat = []
  6. labelMat = []
  7. fr = open(file_name)
  8. for line in fr.readlines():
  9. curLine = line.strip().split()
  10. dataMat.append([1.0,float(curLine[0]),float(curLine[1])])
  11. labelMat.append(int(curLine[2]))
  12. return dataMat, labelMat
  13. def sigmoid(inX):
  14. return 1.0 / (1 + exp(-inX))
  15. def stocGradAscent1(dataMatrix, classLabels, numIter=500):
  16. m,n = shape(dataMatrix)
  17. weights = ones(n) # 创建与列数相同的矩阵的系数矩阵,所有的元素都是1
  18. # 随机梯度, 循环150,观察是否收敛
  19. alpha = 0.001
  20. for j in range(numIter):
  21. # [0, 1, 2 .. m-1]
  22. dataIndex = range(m)
  23. for i in range(m):
  24. randIndex = int(random.uniform(0,len(dataIndex)))
  25. h = sigmoid(sum(dataMatrix[dataIndex[randIndex]]*weights))
  26. error = classLabels[dataIndex[randIndex]] - h
  27. weights = weights + alpha * error * dataMatrix[dataIndex[randIndex]]
  28. # del(dataIndex[randIndex])
  29. return weights
  30. def plotBestFit(dataArr, labelMat, weights):
  31. n = shape(dataArr)[0]
  32. xcord1 = [];
  33. ycord1 = []
  34. xcord2 = [];
  35. ycord2 = []
  36. for i in range(n):
  37. if int(labelMat[i]) == 1:
  38. xcord1.append(dataArr[i, 1]);
  39. ycord1.append(dataArr[i, 2])
  40. else:
  41. xcord2.append(dataArr[i, 1]);
  42. ycord2.append(dataArr[i, 2])
  43. fig = plt.figure()
  44. ax = fig.add_subplot(111)
  45. ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
  46. ax.scatter(xcord2, ycord2, s=30, c='green')
  47. x = arange(-3.0, 3.0, 0.1)
  48. y = (-weights[0] - weights[1] * x) / weights[2]
  49. ax.plot(x, y)
  50. plt.xlabel('X');
  51. plt.ylabel('Y')
  52. plt.show()
  53. def testLR():
  54. # 1.收集并准备数据
  55. dataMat, labelMat = loadDataSet("data/data2.txt")
  56. dataArr = array(dataMat)
  57. # print dataArr
  58. weights = stocGradAscent1(dataArr, labelMat)
  59. # 数据可视化
  60. plotBestFit(dataArr, labelMat, weights)
  61. if __name__ == '__main__':
  62. testLR()

image.png