{ "cells": [ { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 自助法\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "data = pd.read_csv(\"5_train.csv\", header=None,names=[\"x1\", \"x2\", \"y\"])\n", "# 数据可视化\n", "set_0 = data[data['y']==0]\n", "set_1 = data[data[\"y\"]==1]\n", "plt.figure(figsize=(10,5))\n", "plt.scatter(set_0[\"x1\"], set_0[\"x2\"], c=\"r\", marker=\"*\")\n", "plt.scatter(set_1[\"x1\"], set_1[\"x2\"], c=\"b\", marker=\"o\")\n", "plt.show()\n", "#print(data)\n", "train = data.sample(frac=1.0,replace=True) #有放回的随机抽样\n", "test = data.loc[data.index.difference(train.index)].copy()\n", "#print(train)\n", "#print(test)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "测试集准确率: 0.9354838709677419\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "D:\\anaconda\\lib\\site-packages\\sklearn\\linear_model\\base.py:326: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.\n", "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", " indices = (scores > 0).astype(np.int)\n" ] } ], "source": [ "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score\n", "from sklearn.preprocessing import StandardScaler\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "# 进一步处理数据集和测试集,将输入和输出分割\n", "train.columns=list(['x1','x2','y'])\n", "test.columns=list(['x1','x2','y'])\n", "X_train = np.asarray(train.get(['x1', 'x2']))\n", "y_train = np.asarray(train.get('y'))\n", "X_test = np.asarray(test.get(['x1', 'x2']))\n", "y_test = np.asarray(test.get('y'))\n", "# 使用 sklearn 的 LogisticRegression 作为模型\n", "# 其中有 penalty,solver,multi_class 几个比较重要的参数,不同的参数有不同的准确率\n", "model = LogisticRegression(solver='newton-cg')\n", "# newton-cg sag lbfgs liblinear\n", "\n", "\n", "# 对数据进行标准化\n", "ss = StandardScaler()\n", "X_train = ss.fit_transform(X_train) \n", "X_test = ss.fit_transform(X_test)\n", "# 拟合\n", "model.fit(X_train, y_train)\n", "\n", "# 预测测试集\n", "predictions = model.predict(X_test)\n", "\n", "# 打印准确率\n", "print('测试集准确率:', accuracy_score(y_test, predictions))\n", "\n", "weights = np.column_stack((model.intercept_, model.coef_)).transpose()\n", "#print(weights)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "# 将原始数据标准化,并带入模型得到预测结果\n", "X_orgin = np.asarray(data.get(['x1', 'x2']))\n", "X_orgin = ss.fit_transform(X_orgin)\n", "y_orgin = np.asarray(data.get('y'))\n", "m,n = X_orgin.shape\n", "X=np.insert(X_orgin,0,np.ones(m),axis=1)\n", "def sigmode(z):\n", " return 1 / (1+ np.exp(-z))\n", "pred=sigmode(np.dot(X,weights))" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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XUvbtm258cYb6dChA7feemv+t+L09PT8ek888QTnnXceHTt2ZMSIEaXuLzs7mz59+tCxY0c6derE6tWrycjIKPRtdvjw4UycOBGAli1bct9999GpUyeeeuopunTpUii28847D4DFixfTs2dPOnfuzE9/+lM2bdoEwBtvvEHfvn0LxTBjxgzGjh3Lhg0byMnJKdfvYfTo0YwZM4YzzjgDgBNOOIHbb7+9XNu+9dZbDB48mBNOOIFWrVpxzjnn8Pe//71QnW3btlGvXj3atGkDwKWXXsobb7wBwJQpU7jyyis566yzAAo9KCsnJ4e//OUv3HbbbYX2Z2b5iWHHjh2cfvrpQOyLbcuWLYsdv7Ii0yOYPn06ubm5YYchAsSGCErTsGHDMsuTkpKKle/ateuox/zqq6949dVX2bBhAy+++CJLly5l69at/PCHP6RHjx5kZmby1ltvsXDhQho2bMj27dtL3dfPf/5zRowYwRVXXMG+ffs4cuQI69evL/P4TZs2ZcmSJQBMmzaNNWvW0KpVK9LT0xk0aBAHDx7k17/+NW+99Rannnoq6enp/OY3v+GVV15h3rx5hXpB69ev55tvvqFLly6kpqaSnp7O3XfffdTfwbJly+jcuXOJZXnftovq0aMHzz77LBs2bKBr167565s3b86GDRsK1U1KSuLQoUMsWrSIlJQUZsyYkf97ycrK4uDBg/Tq1Ytdu3Zx5513cuONNwKxYa8nn3yy2N/x5Zdfpn///jRo0ICTTjqJ999/P78sJSWFTz75pFBSrazIJAKRqDv77LPp2rUrd911F9deey116tShWbNm9OzZk88++4yPP/6Ym2++mYYNGwLwve99r8T97Nq1iw0bNnDFFVcAlHvIddCgQfmv8z68R4wYQXp6Ounp6axatYply5Zx6aWXArEhpLxvwJs2beLUU0/N3z49PZ0rr7wSgMGDB3PLLbeUmQjKc0rlvffey7333luutpR1nGnTpnHXXXexf/9+fvKTn+QPHR06dIjFixczZ84c9u7dS7du3ejatStZWVmcdtppdO7cuViCf/rpp5k9ezYXXnghTz31FKNGjeLVV18FYj2KlStXHlO8eZQIRCLixBNPDHT/devW5ciRI/nLRS9qKnj8QYMGcc0113DllVdiZrRu3ZovvviC9u3bs2DBgmL7btCgQaH9TZ06lU2bNvH6668DsHHjRr766itat25NgwYNOHDgAPXq1QNg+/btJCUlAdC+fXsWL17MJZdcUuwYR+sRnHnmmYV6PTk5OZx55pnF6nfr1o1PPvkEgPfee4+srCwg1oNo2rQpJ554IieeeCI9evRg6dKlLFmyhJkzZzJ79mz27dvHzp07uf7663n66adZunQpF154Yf7v7I9//GOh32+DBg2KHb8yIjNHICIxP/7xj0lPT+fw4cNs2bKFuXPn0qVLFy699FL++7//mz179gCUOjTUuHFjmjdvnj/ntn//fvbs2cPZZ5/NihUr2L9/P7m5ucyZM6fUGH7wgx9Qp04dHn300fyeQtu2bdmyZUt+Ijh48CDLly8HoF27dmRnZwOxIZbdu3ezatUq1q5dy9q1axk5ciRTp04FoGfPnkyePBmAvXv3Mn36dC6++GIARo4cyb333ss333wDwIEDB3j55ZeBWI8gMzOz2M+zzz4LwMCBA5k2bRr79+9nzZo1fPXVVyUOy+RNAu/fv58nnngifyL78ssv529/+xuHDh1iz549LFy4kHbt2jF69GhycnJYu3Yt06ZN45JLLmHy5Mmccsop7NixIz+RvP/++7Rt2zb/OFlZWXTo0KHU33FFKBGIRMwVV1zB+eefT8eOHbnkkkt48skn+f73v0/fvn0ZOHAgKSkpJCcnl3la5aRJk3j22Wc5//zz6d69O9988w0tWrQgNTWVDh06kJqaygUXXFBmHIMGDWLy5MmkpqYCUK9ePWbMmMF9991Hx44dSU5OZv78+QD87Gc/yx82mTp1av6wVJ6rrroqPxE888wz/M///A/Jycl07dqVa665hh49egDQv39/hg8fTp8+fWjfvj2dOnUqdJZOWdq3b09qairnnnsuffv25fnnn88f9unfvz8bN24EYj2Ldu3acf755zNgwID83ke7du3o27cv559/Pl26dOG2224r84O8bt26/OEPf+Cqq66iY8eOTJo0iUcffTS/fN68efnDaMcs71SyRPnp3LmzV9ZHH31U6W0TldpcM6xYsSLQ/e/cuTPQ/dcEF110kX/77bf5y1Foc1F5bV6yZIlff/31pdYr6f0GLPJSPlcD7RGYWV8zW2Vm2WZW7Fw0MzvBzNLj5QvNrGWQ8YhI4ho7dizr1q0LO4waYevWrYV6B8cqsMliM6sDPA9cCuQAn5nZTHdfUaDa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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 绘制ROC曲线和PR曲线\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.metrics import precision_recall_curve,roc_curve\n", " \n", " \n", "def draw_pr(confidence_scores, data_labels):\n", " plt.figure()\n", " plt.title('PR Curve')\n", " plt.xlabel('Recall')\n", " plt.ylabel('Precision')\n", " plt.grid()\n", " \n", " #精确率,召回率,阈值\n", " precision,recall,thresholds = precision_recall_curve(data_labels,confidence_scores)\n", " \n", " from sklearn.metrics import average_precision_score\n", " AP = average_precision_score(data_labels, confidence_scores) # 计算AP\n", " plt.plot(recall, precision,'k--', label = 'pr_curve(AP=%0.4f)' % AP)\n", " plt.legend()\n", " plt.show()\n", " \n", "def draw_roc(confidence_scores, data_labels):\n", " #真正率,假正率\n", " fpr, tpr, thresholds = roc_curve(data_labels, confidence_scores)\n", " plt.figure()\n", " plt.grid()\n", " plt.title('ROC Curve')\n", " plt.xlabel('FPR')\n", " plt.ylabel('TPR')\n", " \n", " from sklearn.metrics import auc\n", " auc=auc(fpr, tpr) #AUC计算\n", " plt.plot(fpr,tpr,'k--', label = 'roc_curve(AUC=%0.4f)' % auc)\n", " plt.legend()\n", " plt.show()\n", " \n", " \n", "if __name__ == '__main__':\n", " draw_pr(pred, y_orgin)\n", " draw_roc(pred, y_orgin)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "***Scaled data - learning rate: 0.001 - Gradient descent - Stop: 50000 iterations\n", "Omega: [[0. 2.15746373 1.98857912]] - Iter: 50000 - Last cost: 0.30 - Duration: 6.68s\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "准确率为: 0.85\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 以下是非调库实现梯度下降法优化逻辑回归,由于效果一般故舍弃\n", "import time\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn.preprocessing import scale\n", " \n", "# 停止准则\n", "STOP_ITER = 0 # 迭代数量\n", "STOP_COST = 1 # 损失函数\n", "STOP_GRAD = 2 # 梯度值\n", " \n", " \n", "def show_data(data):\n", " set_0 = data[data[\"y\"]==0]\n", " set_1 = data[data[\"y\"]==1]\n", " plt.figure(figsize=(10,5))\n", " plt.scatter(set_0[\"x1\"], set_0[\"x2\"], c=\"r\", marker=\"*\")\n", " plt.scatter(set_1[\"x1\"], set_1[\"x2\"], c=\"b\", marker=\"o\")\n", " x1_ = np.arange(-2, 2, 0.001)\n", "\n", " x2_ = (- Omega[0][0] - Omega[0][1] * x1_) / Omega[0][2]\n", " plt.plot(x1_, x2_)\n", " plt.xlabel(\"x1\")\n", " plt.ylabel(\"x2\")\n", " plt.show()\n", " \n", "#logistic function\n", "def sigmode(z):\n", " return 1 / (1+ np.exp(-z))\n", " \n", "#logistic regression\n", "def model(X, Omega):\n", " \"\"\"\n", " X:样本矩阵 (包括第一列的1)\n", " Omega : 行向量 [w0, w1, ....wn]\n", " 返回预测的结果值\n", " :return:\n", " \"\"\"\n", " return sigmode(np.dot(X, Omega.T))\n", "#maximum likelihood\n", "def cost(X, y, Omega):\n", " \"\"\"\n", " 获取样本的损失值,为所有样本的损失均值\n", " \"\"\"\n", " # 注意,multipy和 np.dot的区别\n", " left = np.multiply(-y, np.log(model(X,Omega)))\n", " right = np.multiply(1-y, np.log(1 - model(X,Omega)))\n", " return np.sum(left-right) / len(X)\n", " \n", "def gradient(X,y,Omega):\n", " \"\"\"\n", " 计算梯度,返回一个和Omega 一样的数组\n", " :return:\n", " \"\"\"\n", " #二维数组,1*n\n", " grad = np.zeros(shape=Omega.shape)\n", " # error n*1\n", " error = y- model(X,Omega)\n", " for j in range(grad.shape[1]):\n", " # grad 1*n ,\n", " grad[0, j] = - np.dot(error.T, X[:,j]) / X.shape[0]\n", " return grad\n", " \n", "\n", " \n", "def stop_cretion(type, value, threshold):\n", " if type == STOP_ITER: return value > threshold\n", " elif type == STOP_COST: return abs(value[-1]-value[-2]) < threshold\n", " elif type == STOP_GRAD: return np.linalg.norm(value) < threshold\n", " \n", "# 重排数据\n", "def shuffle_data(data):\n", " np.random.shuffle(data)\n", " X= data[:,:-1]\n", " y = data[:,-1:]\n", " return X,y\n", " \n", "def descent(data, Omega, batchsize, stoptype, threshold, alpha):\n", " \n", " i=0 #迭代次数\n", " b =0 #批量位置索引\n", " init_time = time.time()\n", " \n", " # 初始化梯度:\n", " grad = np.zeros(Omega.shape)\n", " \n", " #首先对数据清洗\n", " X, y = shuffle_data(data)\n", " \n", " # 初始化cost\n", " cost_value = [cost(X,y,Omega)]\n", " \n", " while True:\n", " # 先求梯度:\n", " grad = gradient(X[b:b+batchsize,:], y[b:b+batchsize,:], Omega)\n", " b += batchsize\n", " \n", " #执行完一次后对数据重新洗牌\n", " if b>= X.shape[0]:\n", " b=0\n", " X,y = shuffle_data(data)\n", " \n", " # 根据梯度更新参数\n", " Omega = Omega - alpha * grad\n", " # 损失值\n", " ## 注意:尽管求梯度时不一定用到所有样本,但求损失值时,用的是所有样本\n", " cost_value.append(cost(X,y,Omega))\n", " i+=1\n", " \n", " if stoptype == STOP_ITER: value=i\n", " elif stoptype == STOP_COST: value= cost_value\n", " elif stoptype == STOP_GRAD: value= grad\n", " \n", " #判断是否\n", " if stop_cretion(stoptype, value, threshold): break\n", " # 返回: Omega ,迭代次数,损失值,当前梯度, 运行时间\n", " return Omega, i-1, cost_value, grad, time.time() - init_time\n", " \n", "def run(data, Omega, batchSize, stopType, thresh, alpha):\n", " Omega, iter, costs, grad, dur = descent(data, Omega, batchSize, stopType, thresh, alpha)\n", " # 根据结果绘制图形\n", " name = \"Original\" if (data[:, 1] > 2).sum() > 1 else \"Scaled\"\n", " name += \" data - learning rate: {} - \".format(alpha)\n", " if batchSize == data.shape[0]:\n", " strDescType = \"Gradient\"\n", " elif batchSize == 1:\n", " strDescType = \"Stochastic\"\n", " else:\n", " strDescType = \"Mini-batch ({})\".format(batchSize)\n", " name += strDescType + \" descent - Stop: \"\n", " if stopType == STOP_ITER:\n", " strStop = \"{} iterations\".format(thresh)\n", " elif stopType == STOP_COST:\n", " strStop = \"costs change < {}\".format(thresh)\n", " else:\n", " strStop = \"gradient norm < {}\".format(thresh)\n", " name += strStop\n", " print(\"***{}\\nOmega: {} - Iter: {} - Last cost: {:03.2f} - Duration: {:03.2f}s\".format(\n", " name, Omega, iter, costs[-1], dur))\n", " fig, ax = plt.subplots(figsize=(12, 4))\n", " ax.plot(np.arange(len(costs)), costs, 'r')\n", " ax.set_xlabel('Iterations')\n", " ax.set_ylabel('Cost')\n", " ax.set_title(name.upper() + ' - Error vs. Iteration')\n", " plt.show()\n", " return Omega\n", " \n", "def predict(X, Omega):\n", " return [1 if x> 0.5 else 0 for x in model(X,Omega)]\n", " \n", "def acuuracy(y,predict_value):\n", " _y =y.ravel()\n", " correct = [1 if _y[i] == predict_value[i] else 0\n", " for i in range(len(_y))]\n", " return np.sum(correct) / len(_y)\n", " \n", " \n", " \n", "if __name__ == '__main__':\n", " # 读取数据\n", " data = pd.read_csv(\"5_train.csv\", header=None, names=[\"x1\", \"x2\", \"y\"])\n", " #print(data.head(3))\n", " #print(data.shape)\n", " \n", " \n", " # 数据增加1列,\n", " data.insert(0,\"Ones\",value=1)\n", " #print(data.loc[:3,:])\n", " \n", " # set X and y\n", " orig_data =data.values\n", " # m 样本的数量, n 特征数量+1(label)\n", " m,n = orig_data.shape\n", " Omega = np.zeros(shape=(1, n - 1))\n", " #批量梯度下降\n", " # 按迭代次数为终止条件:\n", " # run(orig_data, Omega, m, STOP_ITER, 5000, 0.000001)\n", " \n", " # 按损失值的差值\n", " # run(orig_data, Omega, m, STOP_COST, thresh=0.000001, alpha=0.001)\n", " \n", " # 根据梯度变化停止\n", " # run(orig_data, Omega, m, STOP_GRAD, thresh=0.05, alpha=0.001)\n", " \n", " #标准化\n", " orig_data[:,:(n-1)] = scale(orig_data[:,:(n-1)])\n", " \n", " Omega = run(orig_data, Omega, m, STOP_ITER, 50000, 0.001)\n", " #Omega = run(orig_data, Omega, m, STOP_COST, thresh=0.000001, alpha=0.001)\n", " #Omega = run(orig_data, Omega, m, STOP_GRAD, thresh=0.05, alpha=0.001)\n", "\n", " #计算准确率\n", " print(\"准确率为:\", acuuracy(orig_data[:,-1], predict(orig_data[:,:(n-1)], Omega)))\n", " df=pd.DataFrame(orig_data,columns=['1','x1','x2','y'])\n", " show_data(df)\n", " \n", " " ] } ], "metadata": { "interpreter": { "hash": "cc5f70855ac006f3de45a3cc3b9e7d8d53845e50458809cb162b0174266dec97" }, "kernelspec": { "display_name": "Python 3.7.0 64-bit ('base': conda)", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }