在学逻辑回归的时候,了解到线性回归的参数,可以使用梯度下降法或正规方程进行求解。
在对数据进行初步的分析的时候,如果能快速对数据进行拟合并对拟合结果进行可视化,可以让我们更好地把握数据的情况。
我用纯Python实现了逻辑回归,后来我发现sklearn包里有方法可以直接对数据进行拟合。
这个例子是使用房价预测的数据,我们先看一下数据。

直接贴代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<span class="kwd">import</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot </span><span class="kwd">as</span><span class="pln"> plt </span><span class="kwd">from</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">font_manager </span><span class="kwd">import</span> <span class="typ">FontProperties</span> <span class="kwd">from</span><span class="pln"> sklearn</span><span class="pun">.</span><span class="pln">linear_model </span><span class="kwd">import</span> <span class="typ">LinearRegression</span><span class="pln"> font </span><span class="pun">=</span> <span class="typ">FontProperties</span><span class="pun">(</span><span class="pln">fname</span><span class="pun">=</span><span class="str">'华文中宋.ttf'</span><span class="pun">)</span> <span class="com"># 数据</span><span class="pln"> a </span><span class="pun">=</span> <span class="pun">[[</span><span class="lit">25</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">48</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">45</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">43</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">26</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">25</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">35</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">24</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">119</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">81</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">120</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">75</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">64</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">75</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">99</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">66</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">82</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">102</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">140</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">132</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">63</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">55</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">74</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">44</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">88</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">130</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">138</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">58</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">78</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">48</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">87</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">142</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">134</span><span class="pun">]]</span><span class="pln"> b </span><span class="pun">=</span> <span class="pun">[[</span><span class="lit">29</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">30</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">37</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">33</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">22</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">22</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">30</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">27</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">128</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">90</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">143</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">87</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">62</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">76</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">100</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">70</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">73</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">98</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">167</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">147</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">80</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">60</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">90</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">57</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">99</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">145</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">140</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">61</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">94</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">53</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">91</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">145</span><span class="pun">],</span> <span class="pun">[</span><span class="lit">124</span><span class="pun">]]</span><span class="pln"> model </span><span class="pun">=</span> <span class="typ">LinearRegression</span><span class="pun">()</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">fit</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">)</span> <span class="com"># 训练集数据放入模型中</span> <span class="com"># 定义plot图标的横纵坐标及标题,这里要注意的是中文字符前加u字母,才能正确显示中文</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">title</span><span class="pun">(</span><span class="pln">u</span><span class="str">'房屋面积与价格之间的关系'</span><span class="pun">,</span><span class="pln"> fontproperties</span><span class="pun">=</span><span class="pln">font</span><span class="pun">)</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">xlabel</span><span class="pun">(</span><span class="pln">u</span><span class="str">'房屋面积/平方米'</span><span class="pun">,</span><span class="pln"> fontproperties</span><span class="pun">=</span><span class="pln">font</span><span class="pun">)</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">ylabel</span><span class="pun">(</span><span class="pln">u</span><span class="str">'房屋价格/万'</span><span class="pun">,</span><span class="pln"> fontproperties</span><span class="pun">=</span><span class="pln">font</span><span class="pun">)</span> <span class="com"># 定义横纵坐标的范围</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">axis</span><span class="pun">([</span><span class="lit">20</span><span class="pun">,</span> <span class="lit">160</span><span class="pun">,</span> <span class="lit">20</span><span class="pun">,</span> <span class="lit">160</span><span class="pun">])</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">grid</span><span class="pun">(</span><span class="kwd">True</span><span class="pun">)</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln"> b</span><span class="pun">,</span> <span class="str">'bo'</span><span class="pun">,</span><span class="pln"> c</span><span class="pun">=</span><span class="str">'b'</span><span class="pun">)</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">a</span><span class="pun">,</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">predict</span><span class="pun">(</span><span class="pln">a</span><span class="pun">),</span> <span class="str">'g-'</span><span class="pun">)</span><span class="pln"> plt</span><span class="pun">.</span><span class="pln">show</span><span class="pun">()</span> |

这里还提供了一个预测的方法
1 2 3 4 |
<span class="com"># 房屋价格预测</span> <span class="kwd">def</span> <span class="typ">PredictPrice</span><span class="pun">(</span><span class="pln">area</span><span class="pun">):</span><span class="pln"> price </span><span class="pun">=</span><span class="pln"> model</span><span class="pun">.</span><span class="pln">predict</span><span class="pun">([[</span><span class="pln">area</span><span class="pun">]])</span> <span class="kwd">return</span><span class="pln"> price</span> |
在程序中输入PredictPrice(145),得到结果156.39856048
这次数据的简单拟合是使用from sklearn.linear_model import LinearRegression完成的,下次阅读源码,搞清楚里边的原理。