ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《封号码罗》数据分析与人工智能之sklearn回归问题(八)

2020-02-22 19:36:25  阅读:172  来源: 互联网

标签:数据分析 人工智能 矩阵 test train print import sklearn


第一部分

# 回归问题  回归曲线  --->预测
# 分类是有限的,回归是无限的
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier  # 分类问题
from sklearn.neighbors import KNeighborsRegressor  # 回归问题
import matplotlib.pyplot as plt
import time

# x和y之间的关系是线性的
x = np.array([0, 1, 2, 3, 4])
y = np.array([1, 3, 5, 7, 9])
plt.plot(x, y)
plt.show()

# f = lambda x: 2 * x + 1   # f(x) = 2x + 1   # 回归要解决的问题就是解方程

# 线性回归 关键词就是最小二乘法,线性
# 普通线性回归
# 方程推导
# x + y + z = 3
# 2x + y - z = 3
# 3x -y + 4z = 6
# X = np.array([[1, 1, 1], [2, 1, 1 - 1], [3, -1, 4]])  # 方程的系数组成的数组
# w = [x, y, z] # 未知数组成的数组
# f = (y - Xw) ** 2     # 求解f的最小值,二元方程一定是大于0的
# X数据,y是目标值,此时两者都是已知数据
# 未知数据是w,二元一次方程
# 当导数为0 ----- 方程对应的函数值越小
# 令导数等于g
# g = 2 * (y - Xw) * (-X)
# 0 = (y - Xw) * X
# 方程左边乘以X的逆矩阵X_inv
# 0 = y - Xw
Xw = y  # 两边都乘以X的逆矩阵,但是求解逆矩阵必须是方阵,如size=(4,4)
#         一个非方阵的矩阵变成转置矩阵(X.T)之后乘以自身X,它就会变成一个方阵,这个时候就可以求解逆矩阵了
# X.T是转置矩阵   A.dot(X.T) 矩阵本身乘以转置矩阵 = 方阵矩阵


start = time.perf_counter()
# print(X_train, "\n", X_test, "\n", y_train, "\n", y_test)
print()
end = time.perf_counter()
print(f"程序运行耗时为{(start - end).__round__(20)}")

第二部分

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier  # 分类问题
from sklearn.neighbors import KNeighborsRegressor  # 回归问题
import matplotlib.pyplot as plt
import time
# 预测波士顿房价
import sklearn.datasets as datasets

# 导入波士顿房价数据,这个是库本身提供的数据
data = datasets.load_boston()

# 糖尿病数据
# data = datasets.load_diabetes()

# print(data)  # 里面有data是数据,target是房价
X = data["data"]  # 获得数据
# print(X.shape)  # (506, 13),506个样本,13个列属性
y = data["target"]
# print(y.shape)  # (506,)
shuxing = data["feature_names"]
#                 犯罪率 居住面积 商业 chas河  环境
# print(shuxing)  # ['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO''B' 'LSTAT']
# 回归问题 就是通过数据让Xw=y之间建立一个合适的方程
from sklearn.linear_model import LinearRegression  # 线性回归
from sklearn.model_selection import train_test_split

# 声明一个线性模型对象    下面这个粒子是不包含截距的b_
#                       normalize=False是否数据归一化
lr = LinearRegression(fit_intercept=False)  # 模型里面是否计算方程截距
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)  # 百分之一的测试数据
lr.fit(X_train, y_train)  # 算法训练模型
s1 = lr.predict(X_test).round(2)  # 模型预测结果  算法就可以提供建议和参考

w_ = lr.coef_  # 13个未知数的值   coefficient缩写  [ˌkoʊɪˈfɪʃnt]
#                               n.	系数; (测定物质某种特性的) 系数
print(w_)
# 通过lr.fit(X_train, y_train)计算出来了w_,就是对w__这一行的一个封装
#       逆矩阵       测试数据.T(转置矩阵)
# w__ = np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T).dot(y_train)
# print(w__)

# print(w_, "\n", w_.shape)   # 一个列表 和 (13,)
# 列表中有13个数据,原来数据有506样本,13列属性,就相当于506个13元一次方程
# 现在w_返回的列表,就是这些方程通用的未知数的值
b_ = lr.intercept_  # b_ == bias 偏差的意思,这里是方程截距    如果fit_intercept=False,此时截距为0,模型就没有计算截距
# 算法解出来的方程是
# f(X) = Xw_ + b_
# 预测X_test
# res = X_test.dot(w_).round(2) # 等于 s1 = lr.predict(X_test).round(2)
# print(res)


start = time.perf_counter()
# print(s1)  # 预测数据
# print("-" * 100)
# print(y_test)  # 真实数据
end = time.perf_counter()
print(f"程序运行耗时为{(start - end).__round__(20)}")


Python 键盘上的舞者 发布了22 篇原创文章 · 获赞 3 · 访问量 2556 私信 关注

标签:数据分析,人工智能,矩阵,test,train,print,import,sklearn
来源: https://blog.csdn.net/Python_DJ/article/details/104448901

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有