当前位置:   article > 正文

机器学习2--逻辑回归(案列)

机器学习2--逻辑回归(案列)

糖尿病数据线性回归预测

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from sklearn.datasets import load_diabetes
  5. diabetes=load_diabetes()
  6. data=diabetes['data']
  7. target=diabetes['target']
  8. feature_names=diabetes['feature_names']
  9. data.shape
  10. df = pd.DataFrame(data, columns=feature_names)
  11. df.head()
  12. # 抽取训练数据和预测数据
  13. from sklearn.model_selection import train_test_split
  14. x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
  15. x_train.shape,x_test.shape
  16. # 创建模型
  17. from sklearn.linear_model import LinearRegression
  18. linear=LinearRegression()
  19. linear.fit(x_train,y_train)
  20. # 预测
  21. y_pred=linear.predict(x_test)
  22. y_pred
  23. # 得分: 回归的得分很低
  24. #linear.score(x_test,y_test)
  25. ### 线性回归评估指标
  26. #- mean_squared_error 均方误差
  27. from sklearn.metrics import mean_squared_error as mse
  28. # 均方误差
  29. mse(y_test,y_pred)
  30. #### 求线性方程: y = WX + b 中的W系数和截距b
  31. # w系数
  32. linear.coef_
  33. # 10个特征 就有10个系数
  34. # b截距
  35. linear.intercept_
  36. #### 研究每个特征和标记结果之间的关系.来分析哪些特征对结果影响较大
  37. plt.figure(figsize=(5*4, 2*4))
  38. for i, col in enumerate(df.columns):
  39. # 每一列数据
  40. data2 = df[col].copy()
  41. # 画子图
  42. ax = plt.subplot(2, 5, i+1)
  43. ax.scatter(data2, target)
  44. # 线性回归:对每一个特征进行回归分析
  45. linear2 = LinearRegression()
  46. linear2.fit(df[[col]], target)
  47. # 每个特征的系数w和截距b
  48. # y = wx + b
  49. w = linear2.coef_[0]
  50. b = linear2.intercept_
  51. # print(w, b)
  52. # 画直线
  53. x = np.linspace(data2.min(), data2.max(), 2)
  54. y = w * x + b
  55. ax.plot(x, y, c='r')
  56. # 特征
  57. score = linear2.score(df[[col]], target) # 模型得分
  58. ax.set_title(f'{col}: {round(score, 3)}', fontsize=16)
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. ### 抛物线函数
  5. # 抛物线函数
  6. # f(x) = (x - 2)² + 5
  7. # Python函数
  8. f=lambda x:(x-2)**2+5
  9. # 画图
  10. x=np.linspace(-2,6,100)
  11. y=f(x)
  12. plt.plot(x,y)
  13. #### 使用梯度下降算法 求 当x为多少时,函数f(x)的值最小
  14. # ①对目标函数求导;
  15. # ②循环对参数更新;
  16. # ①对目标函数求导;
  17. # 抛物线函数
  18. # f(x) = (x - 2)² + 5
  19. # 求导数
  20. # dx = 2x - 4
  21. d = lambda x: 2 * x - 4
  22. # ②循环对参数更新;
  23. θ = 6
  24. # 学习率 lr : learning_rate
  25. lr=0.03
  26. # 最大迭代次数
  27. max_iter=100
  28. θ_list = [θ]
  29. # 循环
  30. for i in range(max_iter):
  31. θ = θ - lr * d(θ)
  32. θ_list.append(θ)
  33. θ_array = np.array(θ_list)
  34. # 画图
  35. x=np.linspace(-2,6,100)
  36. y=f(x)
  37. plt.figure(figsize=(4,5))
  38. plt.plot(x,y)
  39. plt.plot(θ_array,f(θ_array), marker='*')

  1. Logistic Regression虽然名字里带“回归”,但是它实际上是一种分类方法,用于两分类问题(即输出只有两种)。首先需要先找到一个预测函数(h),显然,该函数的输出必须是两类值(分别代表两个类别),所以利用了*Logistic函数(或称为Sigmoid函数)*

  1. #1实战手写数字识别
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. # 逻辑回归: 分类
  6. from sklearn.linear_model import LogisticRegression
  7. # 使用KNN与Logistic回归两种方法
  8. from sklearn.datasets import load_digits
  9. digits=load_digits()
  10. digits
  11. data=digits['data']
  12. target=digits['target']
  13. feature_names=digits['feature_names']
  14. target_names=digits['target_names']
  15. imges=digits['images']
  16. data.shape
  17. imges.shape
  18. pd.Series(target).unique()
  19. feature_names
  20. #划分数据集
  21. from sklearn.model_selection import train_test_split
  22. x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2)
  23. #使用逻辑回归
  24. #创建模型,训练和预测
  25. # C=1.0 : 越大表示越严格,对训练数据拟合更好,可能导致过拟合
  26. # 越小表示不严格,对训练数据拟合不好,可能导致欠拟合
  27. #
  28. # solver : 逻辑回归的损失函数的一种进行优化的算法
  29. # {'lbfgs', 'liblinear', 'newton-cg', 'newton-cholesky', 'sag', 'saga'},
  30. # solver='lbfgs' 默认值
  31. # liblinear:一般适用于小数据集
  32. # sag,saga: 一般使用于大数据集,速度更快
  33. # 其他是中等数据集
  34. #
  35. # max_iter=100: 最大迭代次数
  36. #
  37. # n_jobs=-1 表示使用的CPU核数,多进程处理,一般设置为CPU核数,-1表示时使用所有处理器
  38. lr=LogisticRegression(C=1.0,solver='lbfgs',max_iter=100,n_jobs=-1)
  39. #训练
  40. %timeit lr.fit(x_train,y_train)
  41. # 预测
  42. %timeit lr.predict(x_test)
  43. # 得分
  44. lr.score(x_train,y_train)
  45. lr.score(x_test,y_test)
  1. # 导包使用datasets.make_blobs创建一系列点
  2. #from sklearn.datasets import make_blobs
  3. import numpy as np
  4. import pandas as pd
  5. import matplotlib.pyplot as plt
  6. from sklearn.linear_model import LogisticRegression
  7. from sklearn.datasets import make_blobs
  8. # n_samples=100, 样本数,行数
  9. # n_features=2, 特征数,列数
  10. # centers=None, 几堆点,默认是3
  11. # cluster_std=1.0, 离散程度
  12. data,target=make_blobs(n_samples=300,centers=4,cluster_std=1.0)
  13. plt.scatter(data[:,0],data[:,1],c=target)
  14. #设置三个中心点,随机创建100个点
  15. #创建机器学习模型(逻辑斯蒂回归),训练数据
  16. lr=LogisticRegression(max_iter=10000)
  17. lr.fit(data,target)
  18. lr.score(data,target)
  19. #分类后,并绘制边界图
  20. x=np.array([1,2,3,4])
  21. y=np.array([5,6,7,8,9])
  22. X, Y = np.meshgrid(x, y)
  23. # 让X,Y相交
  24. XY=np.c_[X.reshape(-1),Y.reshape(-1)]
  25. # 分别对x轴和y轴的数据等分成1000份
  26. # 分别对x轴和y轴的数据等分成1000份
  27. x = np.linspace(data[:, 0].min(), data[:, 0].max(), 1000)
  28. y = np.linspace(data[:, 1].min(), data[:, 1].max(), 1000)
  29. X, Y = np.meshgrid(x, y)
  30. # ravel(): 扁平化
  31. XY = np.c_[X.ravel(), Y.ravel()]
  32. XY.shape
  33. # 提供测试数据: XY
  34. y_pred=lr.predict(XY)
  35. y_pred.shape
  36. # 画边界图
  37. plt.pcolormesh(X,Y,y_pred.reshape(1000,1000))
  38. plt.scatter(data[:,0],data[:,1],c=target,cmap='rainbow')

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/116788
推荐阅读
相关标签
  

闽ICP备14008679号