栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【组队学习】sklearn线性回归与逻辑回归

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【组队学习】sklearn线性回归与逻辑回归

只了解基本的python,匆匆翻阅过一遍西瓜书的我大胆的加入了这个组队活动然后发现……这点知识不够用QAQ。把一些琐碎的东西记下来吧。

本文代码都来自于Datawhale~

一、线性回归
#1产生数据
import numpy as np
import matplotlib.pyplot as plt 

def true_fun(X): # 这是我们设定的真实函数,即ground truth的模型
    return 1.5*X + 0.2

np.random.seed(0) # 设置随机种子
n_samples = 30 # 设置采样数据点的个数

'''生成随机数据作为训练集,并且加一些噪声'''
X_train = np.sort(np.random.rand(n_samples)) 
y_train = (true_fun(X_train) + np.random.randn(n_samples) * 0.05).reshape(n_samples,1)

#2定义模型
from sklearn.linear_model import LinearRegression # 导入线性回归模型
model = LinearRegression() # 定义模型
model.fit(X_train[:,np.newaxis], y_train) # 训练模型
print("输出参数w:",model.coef_) # 输出模型参数w
print("输出参数b:",model.intercept_) # 输出参数b

#3可视化
X_test = np.linspace(0, 1, 100)
plt.plot(X_test, model.predict(X_test[:, np.newaxis]), label="Model")
plt.plot(X_test, true_fun(X_test), label="True function")
plt.scatter(X_train,y_train) # 画出训练集的点
plt.legend(loc="best")
plt.show()

这是我的运行结果:

 代码注释中还有个“增加噪声”,很好奇,调了下参数,把0.05调大了:

 可以看到,数据更加分散。

托群里小伙伴的福,困惑得到了大佬的解释。因为这些样本不是真实数据,而是随机数,按照正弦函数分布,但这样和真实数据差得太远了,看不出模型的好坏,于是增加了“噪声”,简而言之,就是在原本数据的基础上又给大家增加了一个小小的随机数,让他们更接近真实数据。所以当我把参数调大时,数据更加分散了,哪怕是真实函数的拟合效果也没那么好了。线性函数,不适合当前情况,可以考虑多项式回归。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures # 导入能够计算多项式特征的类
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score

def true_fun(X): # 这是我们设定的真实函数,即ground truth的模型
    return np.cos(1.5 * np.pi * X)
np.random.seed(0)
n_samples = 30 # 设置随机种子

X = np.sort(np.random.rand(n_samples)) 
y = true_fun(X) + np.random.randn(n_samples) * 0.1

degrees = [1, 4, 15] # 多项式最高次
plt.figure(figsize=(14, 5))
for i in range(len(degrees)):
    ax = plt.subplot(1, len(degrees), i + 1)
    plt.setp(ax, xticks=(), yticks=())
    polynomial_features = PolynomialFeatures(degree=degrees[i],
                                             include_bias=False)
    linear_regression = LinearRegression()
    pipeline = Pipeline([("polynomial_features", polynomial_features),
                         ("linear_regression", linear_regression)]) # 使用pipline串联模型
    pipeline.fit(X[:, np.newaxis], y)
    
    scores = cross_val_score(pipeline, X[:, np.newaxis], y,scoring="neg_mean_squared_error", cv=10) # 使用交叉验证
    X_test = np.linspace(0, 1, 100)
    plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model")
    plt.plot(X_test, true_fun(X_test), label="True function")
    plt.scatter(X, y, edgecolor='b', s=20, label="Samples")
    plt.xlabel("x")
    plt.ylabel("y")
    plt.xlim((0, 1))
    plt.ylim((-2, 2))
    plt.legend(loc="best")
    plt.title("Degree {}nMSE = {:.2e}(+/- {:.2e})".format(
        degrees[i], -scores.mean(), scores.std()))
plt.show()

运行结果如下:

 二、逻辑回归

在运行逻辑回归的代码时,我遇到了很多问题。因为需要导入数据,但是程序总是告诉我无法找到相应的文件,在网上找了很多方法都不行,队长帮忙让导其他数据库也不可,后来大佬A重做了一份,大佬B上传,渣渣只负责下载2333

问题还是要记下来的,我在github上看到的文件是这样:

但是下载下来:

 就散开了,然后还有一份.py文件和raw同级在外面,里面的这些文件依然找不到。

据说方法是:需要新clone一次仓库,然后再回退到这个版本
git clone https://github.com.cnpmjs.org/datawhalechina/machine-learning-toy-code.git
然后回退
git reset --hard 5d09e889df3a1169eed3059dd542696d83e32e08

啊,我就先记下来吧,渣渣的电脑连git都要现装,今天实在来不及了。

总之正确做法后,是这样的:

 就不赘述了,代码改天再贴,今天全耗在这个找文件上了。

但是我还是改了下随机梯度下降里的参数,是正则化参数的倒数,调大正则化减弱,调小正则化加强。调小后输出结果确实有变化,调大很多也没变化。

这部分其实没看懂,输出结果是啥也不是很理解来着,留一下改天再补。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664903.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号