Sklearn库,一个神奇的瑞士军刀0

本文介绍了Python中最小二乘法的实现,通过scipy库的leastsq函数进行拟合,并展示了如何用Q-Q图检验拟合效果。接着,探讨了逻辑回归在二分类问题中的应用,包括原理和Python实现,可以使用sklearn库的LogisticRegression模型。
摘要由CSDN通过智能技术生成

pip install scikit-learn

Qhttps://blog.csdn.net/qq_39355550/article/details/82792460

0.机器学习与sklearn的知识图谱

1.逻辑回归

(1)最小二乘法

最小二乘法拟合一次函数(身高)为例。

import numpy as np
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from scipy.optimize import leastsq

##样本数据(Xi,Yi),需要转换成数组(列表)形式
Xi=np.array([162,165,159,173,157,175,161,164,172,158]) #身高数据
Yi=np.array([48,64,53,66,52,68,50,52,64,49])#体重数据
##需要拟合的函数func
def func(p,x):
    k,b=p
    return k*x+b
##偏差函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的
def error(p,x,y):
    return func(p,x)-y
#k,b的初始值,可以任意设定,经过几次试验,发现p0的值会影响cost的值:Para[1]
p0=[1,20]
#把error函数中除了p0以外的参数打包到args中
Para=leastsq(error,p0,args=(Xi,Yi))
#读取结果
k,b=Para[0]
print("k=",k,"b=",b)
#画样本点
plt.figure(figsize=(8,6)) ##指定图像比例: 8:6
plt.scatter(Xi,Yi,color="red",label="Sample data",linewidth=2) 
#画拟合直线
x=np.linspace(150,180,80) #在150-180直接画80个连续点
y=k*x+b ##函数式
plt.plot(x,y,color="blue",label="Fitting Curve",linewidth=2) 
plt.legend() #绘制图例
plt.xlabel('横轴:身高(厘米)', fontproperties = 'simHei', fontsize = 12)
plt.ylabel('纵轴:体重(公斤)', fontproperties = 'simHei', fontsize = 12)
plt.show()

from scipy.optimize import leastsq

然后定义两个Python函数,分别是函数和偏差值,主要是这个error。用leastsq进行最小二乘法拟合。

如果需要画多张图像(窗口),plt.figure(1),plt.figure(2),......

如果需要画多子图,plt.subplot(221)这样

 https://www.cnblogs.com/wuwen19940508/p/8638266.html

matplotlib三维画图

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(x, y, z, label='这里写图例')

 使用Q-Q图检验拟合的准确性。

https://blog.csdn.net/u013946794/article/details/49639485

数据中一串数目的每个点都是该数据的某分位点,把这些点的(称为样本分位数点)和

相应的理论上的分位数配对做出散点图,如果该数据服从正态分布,那么该图看上去应该像一条直线,否则就不服从正态分布。

from statsmodels.graphics.api import qqplot 

算出xy_res(每一点的残差loss作为一个list)

 fig=qqplot(np.array(xy_res),line='q',ax=ax)

(2)逻辑回归

用于解决二分类问题。分为四步

https://blog.csdn.net/weixin_39445556/article/details/83930186

https://blog.csdn.net/weixin_39445556/article/details/84502260

可以用Python Numpy实现:

class logistic(object):
    def __init__(self):
        self.W = None
    def train(self,X,y,learn_rate = 0.01,num_iters = 5000):
        num_train,num_feature = X.shape
        #init the weight
        self.W = 0.001*np.random.randn(num_feature,1).reshape((-1,1))
        loss = []        
        for i in range(num_iters):
            error,dW = self.compute_loss(X,y)
            self.W += -learn_rate*dW            
            loss.append(error)
            if i%200==0:
                print ('i=%d,error=%f' %(i,error))
        return loss    
    def compute_loss(self,X,y):
        num_train = X.shape[0]
        h = self.output(X)
        loss = -np.sum((y*np.log(h) + (1-y)*np.log((1-h))))
        loss = loss / num_train        
        dW = X.T.dot((h-y)) / num_train    
        return loss,dW    
    def output(self,X):
        g = np.dot(X,self.W)
        return self.sigmod(g)
    def sigmod(self,X):
        return 1/(1+np.exp(-X))    
    def predict(self,X_test):
        h = self.output(X_test)
        y_pred = np.where(h>=0.5,1,0)
        return y_pred

 也可以用:

sklearn.linear_model.LogisticRegression

https://www.cnblogs.com/sddai/p/9571305.html 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值