首页
学习
活动
专区
工具
TVP
发布

机器学习中监督学习之数据预处理操作

# -- 监督学习 之 数据预处理

#------------------------

import numpy as np

from sklearn import preprocessing

data=np.array([[3,-1.5,2,5.4],[0,4,-0.3,2.1],[1,3.3,-1.9,-4.3]])# 创造 array 数组

# (data.mean():计算整体均值; data.mean(axis=0):计算每列均值;data.mean(axis=1):计算每行均值)

## 1. 数据预处理方式

# 1.1 均值移除(标准化)

datas1=preprocessing.scale(data)# -- 每列标准化:等价 (data-data.mean(axis=0))/data.std(axis=0)

# 1.2 范围缩放(范围标准化)

dataser=preprocessing.MinMaxScaler(feature_range=(0,1))# 设计取值范围规则

datas2=dataser.fit_transform(data)# 规则作用于数据data: 等价 (data-data.min(axis=0))/(data.max(axis=0)-data.min(axis=0))

# 1.3 归一化: 将特征向量调整为L1范数,使特征向量的数值之和为1.

datas3=preprocessing.normalize(data,norm='l1')# 确保数据点没有因为特征的基本性质而产生较大的差异,确保数据处于同一数量级,提高不同特征数据的可比性。

# 1.4 二值化: 将数值特征向量转换为 布尔类型 向量

datas4=preprocessing.Binarizer(threshold=1.4).transform(data)

# 1.5 独热编码: 将所有变量 唯一值进行 排序,然后将变量进行 根据有无 规则 转换为 0/1组成的向量

# (**解决问题**:由于分类器往往默认数据数据是连续的,并且是有序的,但是在很多机器学习任务中,存在很多离散(分类)特征,因而将特征值转化成数字时,往往也是不连续的, One-Hot 编码解决了这个问题。)

enc = preprocessing.OneHotEncoder()

enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])

enc.transform([[0, 1, 3]]).toarray()

## 2. 标记编码方式 : 将单词标记 转化为数值形式。

label_encoder=preprocessing.LabelEncoder()# 定义一个标记编码器

input=['audi','ford','audi','toyota','ford','bmw']# 标记

label_encoder.fit(input)# 对标记进行编码

# 显示标记规则

for i,item in enumerate(label_encoder.classes_):

print(item,'-->',i)

test1=label_encoder.transform(['toyota','ford','audi'])# 利用以上的标记规则进行编码

print(list(test1))

test2=label_encoder.inverse_transform([0,3,1,2])# 反向还原

print(test2)

#-------------- 线性回归

# 3. 简单线性回归模型

# 3.1 划分 训练集 和 测试集

num_training=int(0.8*len(x))

num_test=len(x)-num_training

# 训练集

x_train=np.array(x[:num_training]).reshape((num_training,1))

y_train=np.array(y[:num_training])

# 测试集

x_test=np.array(x[:num_test]).reshape((num_test,1))

y_test=np.array(y[:num_test])

# 3.2 回归操作

from sklearn import linear_model

reg=linear_model.LinearRegression()# 建立回归对象

# 训练集训练

reg.fit(x_train,y_train)# 训练

# 查看回归效果

import matplotlib.pyplot as plt

yhat=reg.predict(x_train)# 得到训练集的拟合值

plt.figure()

plt.scatter(x_train,y_train,color='green',s=3)

plt.plot(x_train,yhat,color='blue',linewidth=1)

plt.title('Training Data')

plt.show()

# 3.3 利用回归结果来 对 测试集 预测 评级 预测效果

y_testhat=reg.predict(x_test)

import sklearn.metrics as sm# 评价效果模块

xg1=round(sm.mean_absolute_error(y_testhat,y_test),2)# 平均绝对误差

xg2=round(sm.mean_squared_error(y_testhat,y_test),2)# 均方误差(MSE)

xg3=round(sm.median_absolute_error(y_testhat,y_test),2)# 中位数绝对误差(MSE)

xg4=round(sm.explained_variance_score(y_testhat,y_test),2)# 解释方差得分: 衡量模型对数据集波动的解释能力,1分时,效果最好

xg5=round(sm.r2_score(y_testhat,y_test),2)# R2值 2为取小数位数

# 4. 创造岭回归器 解决普通线性回归对 异常值敏感 问题: 引入正则化项 的系数作为阀值来消除异常值影响

ridge_reg=linear_model.Ridge(alpha=0,fit_intercept=True,max_iter=1000)# 建立岭回归器

# (alpha 这里调节 修正程度, 0=普通回归,值越大对极端值越不敏感)

ridge_reg.fit(x_train,y_train)

yridgehat=ridge_reg.predict(x_train)

# 查看回归效果

import matplotlib.pyplot as plt

plt.figure()

plt.scatter(x_train,y_train,color='green',s=3)

plt.plot(x_train,yridgehat,color='red',linewidth=1)

plt.title('Training Data')

plt.show()

#--5. 多项式拟合回归

from sklearn.preprocessing import PolynomialFeatures

ploynmial=PolynomialFeatures(degree=3)# 多项式次数设置为3次

xtr=ploynmial.fit_transform(x_train)# 计算x_train的 0,1,2,3次方 数据准备

poly_linear_model=reg.fit(xtr,y_train)# 多项式拟合

ypolyhat=poly_linear_model.predict(xtr)# 得到拟合结果

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180611G20HN700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券