数据的回归与分类分析
数据的回归与分类分析
一、线性回归练习
1.父亲-孩子x-y线性回归方程
删除重复选项:
在数据分析中选择回归:
结果:
方程为y=0.2978x+49.15。其中决定系数为1,说明有极高的相关性。
如果父亲身高75,孩子身高为71.485英寸
同理,母亲的回归方程:
方程为y=0.3334x+48.472。其中决定系数为1,说明有极高的相关性。
由此可知,“父亲高则儿子高,父亲矮则儿子矮”(即父亲与儿子身高相关,且为正相关)、“母高高一窝,父高高一个”(即母亲的身高比父亲的身高对子女的影响更大)的习俗传说是有相关依据的。
二、线性回归方法的有效性判别
图一:
从图中可以看出线性并不是很能够表现原始数据的一个变化趋势,所有该线性回归方程不成立。
图二:
从图中可以看出线性并不是很能够表现原始数据的一个变化趋势,所有该线性回归方程不成立。通过采用其他的回归曲线来测试,发现对于2次的多项式的回归方程来说,会比线性回归方程更好表现数据的变化趋势。
图三:
该线性回归方程基本能够体现该数据集的一个变化情况。
图四:
该线性回归方程不成立。
三、python和anaconda的安装
参考https://blog.csdn.net/ITLearnHall/article/details/81708148该教程
四、鸢尾花数据集使用SVM线性分类
得到所需要的数据
# 获取所需数据集
iris=datasets.load_iris()
#每行的数据,一共四列,每一列映射为feature_names中对应的值
X=iris.data
#每行数据对应的分类结果值(也就是每行数据的label值),取值为[0,1,2]
Y=iris.target
#通过Y=iris.target.size,可以得到一共150行数据,三个类别个50条数据,并且数据是按照0,1,2的顺序放的
处理数据
#只取y<2的类别,也就是0 1并且只取前两个特征
X=X[:,:2]
#获取0 1类别的数据
Y1=Y[Y<2]
y1=len(Y1)
#获取0类别的数据
Y2=Y[Y<1]
y2=len(Y2)
X=X[:y1,:2]
绘图
#绘制出类别0和类别1
plt.scatter(X[0:y2,0],X[0:y2,1],color='red')
plt.scatter(X[y2+1:y1,0],X[y2+1:y1,1],color='blue')
plt.show()
数据归一化
#标准化
standardScaler=StandardScaler()
standardScaler.fit(X)
#计算训练数据的均值和方差
X_standard=standardScaler.transform(X)
#用scaler中的均值和方差来转换X,使X标准化
svc=LinearSVC(C=1e9)
svc.fit(X_standard,Y1)
画出决策边界
def plot_decision_boundary(model, axis):
x0, x1 = np.meshgrid(
np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1, 1),# 600个,影响列数
np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1, 1),# 600个,影响行数
)
# x0 和 x1 被拉成一列,然后拼接成360000行2列的矩阵,表示所有点
X_new = np.c_[x0.ravel(), x1.ravel()] # 变成 600 * 600行, 2列的矩阵
y_predict = model.predict(X_new) # 二维点集才可以用来预测
zz = y_predict.reshape(x0.shape) # (600, 600)
from matplotlib.colors import ListedColormap
custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])
plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)
#print(X_new)
plot_decision_boundary(svc, axis=[-3, 3, -3, 3])
plt.scatter(X_standard[0:y2,0], X_standard[0:y2,1],color='red')
plt.scatter(X_standard[y2:y1,0], X_standard[y2:y1,1],color='blue')
plt.show()