机器学习100天

这篇博客介绍了如何对数据集进行预处理,包括处理缺失值、标签编码和独热编码。作者使用了`SimpleImputer`来填充缺失值,`LabelEncoder`和`OneHotEncoder`对分类变量进行编码,并通过`train_test_split`分割数据集。此外,还自定义了一个`StandScale`类实现特征缩放,确保数据适合机器学习算法。
摘要由CSDN通过智能技术生成

day1

import numpy as np
import pandas as pd
dataset = pd.read_csv('Data.csv',header = 0) # header是选从哪一行开始作为第一行,header=None是那个第一行是标签标签也算成数据
# dataset是一个dataframe类型

#dataset = pd.read_csv('Data.csv', names=["编号", "姓名", "地址", "日期"]) #names用于第一行不是列名的情况
# iloc[   :  ,  : ]    前面的冒号就是取行数,后面的冒号是取列数
X = dataset.iloc[ : , :-1].values  #加上.values就可以把这个处理成数组的形式来使用了
Y = dataset.iloc[ : , 3].values

## 由于有一些数据项是缺失的,所以我们需要对这些缺失的数据项补全
# from sklearn.preprocessing import Imputer 报错
# 在sklearn的0.22以上版本的sklearn去除了Imputer类,我们可以使用SimpleImputer类代替。或者降级回版本sklearn 0.19
print(X)
print("------------处理Nan值-------------------")
from sklearn.impute import SimpleImputer
# imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)之前版本这里axis = 0表示按列进行
imputer = SimpleImputer(missing_values = np.nan, strategy = "mean") # 新版本得用np.nan
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
# 返回值为SimpleImputer()类,通过fit(X)方法可以计算X矩阵的相关值的大小,以便填充其他缺失数据矩阵时进行使用
# 填补缺失值,一般使用该方法前要先用fit()方法对矩阵进行处理
print(X)
print("----------------将字母那种也处理成数据--------------------")
## 下一步处理标签值,由于yes/no这种数据没法利用,所以需要稍微处理一下
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.compose import ColumnTransformer
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
print(X)
print("----------------独热编码-------------------------------")
"""
ColumnTransformer(transformers, -->(名称,转换器,列)元组的列表,指定要应用于数据子集的转换器对象。

remainder=‘drop’, -->默认为’drop’,未指定的列将被删除.通过指定
remainder=‘passthrough’,所有未指定的剩余列transformers将自动通过)

"""
#onehotencoder = OneHotEncoder(categorical_features = [0]) #这个意思是应用到第0列上
#X = onehotencoder.fit_transform(X).toarray()
## sklearn变了好多,可以用ColumnTransformer
ct = ColumnTransformer([('my_ohe', OneHotEncoder(), [0])], remainder='passthrough')
# remainder = 'passthrough会把剩下的也加进来
X = ct.fit_transform(X)  #.toarray() 这里就不要加.toarray()了
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)
print(X)
print(Y)
print("----------------将数据集分割为训练集和测试集---------------------------")
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=0)
# test_size表示测试集的比例,同理train_size表示训练集的比例
# random_state这一项只要有个值就是每次划分都一样,如果没有值,每次划分就不一样
print(X_train)
print("*********")
print(X_test)
print("**********")
print(Y_train)
print("********")
print(Y_test)
print("-----------特征缩放-------------------")
'''
大多数机器学习算法在计算中使用两个点之间的欧氏距离,特征在幅度,单位和范围上引起了很大的变化
所以我们需要一个特征缩放
'''

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
print(X_train)
print("****")
print(X_test)

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split

class StandScale:
    def __init__(self):
        self.mean_ = None
        self.scale_ = None
    def fit(self,x):
        self.mean_ = np.array([np.mean(x[:,i]) for i in range(x.shape[1])]) # 每一列的均值
        self.scale_ = np.array([np.std(x[:,i]) for i in range(x.shape[1])]) # 每一列的标准差
    def transform(self,x):
        col_num = x.shape[1]
        for i in range(col_num):
            x[:,i] = (x[:,i] - self.mean_[i])/self.scale_[i]


data = datasets.load_iris()
#print(data)
data_x = data.data
data_y = data.target
data_name = data.target_names
print(type(data_y)) #<class 'numpy.ndarray'>
x_train,x_test,y_train,y_test = train_test_split(data_x,data_y, test_size = 0.2)
print(np.mean(data_x[:,1]))
print(data_x.shape)  # 返回的是个元组
print(data_x.shape[1])
a = np.array([np.mean(data_x[:,i]) for i in range(data_x.shape[1])])
print(a)
standscale = StandScale()
standscale.fit(data_x)
standscale.transform(data_x)
print(data_x)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新城里的旧少年^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值