基于Sklearn机器学习代码实战
2022/11/28 1:24:55
本文主要是介绍基于Sklearn机器学习代码实战,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
LinearRegression
线性回归入门
数据生成
为了直观地看到算法的思路,我们先生成一些二维数据来直观展现
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) # 训练数据是加上一定的随机噪声的
定义模型
我们可以直接点用sklearn中的LinearRegression即可:
from sklearn.linear_model import LinearRegression model = LinearRegression() # 这就是我们的模型 model.fit(X_train[:, np.newaxis], y_train) # 训练模型 print("输出参数w:",model.coef_) print("输出参数b:",model.intercept_)
输出参数w: [[1.4474774]] 输出参数b: [0.22557542]
注意上面代码中的np.newaxis,因为X_train是一个一维的向量,那么其作用就是将X_train变成一个N*1的二维矩阵而已。其实写成X_train[:,None]是相同的效果。
至于为什么要这么做,你可以不这么做试一下,会报错为:
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
可以简单理解为这是sklearn的库对训练数据的要求,不能够是一个一维的向量。
模型测试与比较
可以看到我们输出为1.44和0.22,还是很接近真实答案的,那么我们选取一批测试集来看看精度:
X_test = np.linspace(0,1,100) # 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()
上述情况是最简单的,但当出现更高维度时,我们就需要进行多项式回归才能够满足需求了。
多项式回归
具体实现
对于多项式回归,一般是利用线性回归求解y=∑i=1mbi×xi,因此算法如下:
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): # 真实函数 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] # 多项式最高次,我们分别用1次,4次和15次的多项式来尝试拟合 plt.figure(figsize=(14, 5)) for i in range(len(degrees)): ax = plt.subplot(1, len(degrees), i+1) # 总共三个图,获取第i+1个图的图像柄 plt.setp(ax, xticks = (), yticks = ()) # 这是 设置ax图中的属性 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()
标签:Sklearn,机器,代码实战,数据代码,函数 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
这篇关于基于Sklearn机器学习代码实战的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-18机器学习与数据分析的区别
- 2024-10-28机器学习资料入门指南
- 2024-10-25机器学习开发的几大威胁及解决之道
- 2024-10-24以下是五个必备的MLOps (机器学习运维)工具,帮助提升你的生产效率 ??
- 2024-10-15如何选择最佳的机器学习部署策略:云 vs. 边缘
- 2024-10-12从软件工程师转行成为机器学习工程师
- 2024-09-262024年机器学习路线图:精通之路步步为营指南
- 2024-09-13机器学习教程:初学者指南
- 2024-08-07从入门到精通:全面解析机器学习基础与实践
- 2024-01-24手把手教你使用MDK仿真调试