用Scikit-learn解决分类与回归问题

Scikit-learn解决分类与回归问题

  1. 线性回归模型

和其他Python框架一样,首先导入我们需要的库。在Scikit-Learn中,有很多已经封装好的算法库,包括一会要用的线性模型算法族库(linear_model)、最近邻算法族库(neighbors)、朴素贝叶斯算法族库(na?ve_bayes)、决策树模型算法族库(tree)、支持向量机模型算法族库(svm)、神经网络算法模型族库(neural_network)等等。这里肯定导入线性模型算法族库还有matplotlib来生成图像以及依靠numpy生成简单数据集。

import matplotlib.pyplot as plt

import numpy as np 

 

 

紧接着利用numpy生成一个0 30且步长为1的序列,这在numpy中可以采用linspace函数实现。然后直接设定好线性模型的参数放入y上。同时为了模拟现实中随机数的情况再利用numpy加上一些随机数。之后利用matplotlib来生成散点图。

x = np.linspace(0,30,30)

y = 4*x + 1

x = x + np.random.rand(30)

plt.scatter(x,y) 

 

 

我们初始设置线性模型为y = 4x + 1,最后得到如图1所示的散点图

用Scikit-learn解决分类与回归问题

1.1 初始散点图

下面,我们就直接利用Scikit-Learn中的函数直接训练线性回归模型。和之间将线性回归时所讲的一样,Scikit-Learn采用最小二乘法拟合模型并采用奇异值分解的方法求解。自然,这里线性模型接收的参数只接收矩阵,因此我们还需要利用列表推导把x,y转成列表。并且我们设定一个x_来检测模型的预测结果。

x = [[i] for i in x]

y = [[i] for i in y]

x_ = [[1],[2]]

model = linear_model.LinearRegression()

model.fit(x,y)

model.predict(x_) 

 

 

线性模型中的权重参数w会自动存放在model.coef_变量中,而随机误差值b会存放在model.intercept_中。我们获取这两个变量,然后重新绘制折线图,就得到如图1.2所示的结果。

model = linear_model.LinearRegression()

model.fit(x,y)

model.predict(x_)

w = model.coef_

b = model.intercept_

z = w*x + b

plt.plot(x,z,g--)

plt.show() 

 

 

用Scikit-learn解决分类与回归问题

1.2 线性回归模型拟合结果

我们也可以一下模型的预测结果

用Scikit-learn解决分类与回归问题用Scikit-learn解决分类与回归问题

1.3 模型预测结果

用Scikit-learn解决分类与回归问题

从图1.31.4可以看到结果基本还是与初期设定的值是吻合的。

 

  1. 逻辑回归模型

    逻辑回归某种程度上也属于线性模型但它反而是一个分类问题。所以在Scikit-Learn中也属于线性模型算法族库。同时由于是离散的分类问题,我们同样采用之前已经讲过的鸢尾花数据集。参数中return_X_y表示是否将自变量与因变量独立导出,我们这里肯定选True。之后调用LogisticRegression()函数,里面的参数max_iter表示最大迭代次数,这里设置成1000。最后的clf.predict()返回预测结果,clf.score()会用自带的性能评估器评价得分。

    import matplotlib.pyplot as plt
    
    import numpy as np
    
    from sklearn.linear_model import LogisticRegression
    
    from sklearn.datasets import load_iris
    
     
    
    X,y = load_iris(return_X_y=True)
    
    clf = LogisticRegression(max_iter=1000).fit(X,y)
    
    clf.predict(X)
    
    clf.score(X,y) 

     


    用Scikit-learn解决分类与回归问题

2.1 预测结果和性能得分

用Scikit-learn解决分类与回归问题

上一篇:codeforces1540B


下一篇:组播(领悟)