sklearn机器学习编程练习大全(二)
- 第11题 从字符串提取标签
- 第12题 IRIS数据集探索
- 第13题 构建模型,计算准确率
- 第14题 预估目标列编码
- 第15题 one-hot编码
第11题 从字符串提取标签
DataFrame如下:
如何将以上的DataFrame变成如下的DataFrame?
代码如下:
import pandas as pddf = pd.DataFrame({'tags':['#name#hobby#score', '#python#Java#php#C++', '#country', '#today#tomorrow']}
)
df = df['tags'].str.split('#', expand=True)
df.drop(columns=[0], inplace=True)
df.columns = ['tag1', 'tag2', 'tag3', 'tag4']
第12题 IRIS数据集探索
1、如何加载IRIS数据集?代码如下:
from sklearn.datasets import load_iris
iris = load_iris()
2、如何将IRIS数据集转换成DataFrame形式?代码如下:
from sklearn.datasets import load_iris
import pandas as pdiris = load_iris()
df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
得到如下的DataFrame:
3、拆分训练和测试集
拆分训练集和测试集需要使用sklearn.model_selection下面的train_test_split函数,函数的参数为特征数据、预估目标和测试集所占的比例,返回值有四个,代码如下:
from sklearn.model_selection import train_test_split
data_train, data_test, target_train, target_test = train_test_split(data, target, test_size=0.3)
第13题 构建模型,计算准确率
1、接上题,构建逻辑回归模型,代码如下:
# 导入逻辑回归模型
from sklearn.linear_model import LogisticRegression
# max_iter=1000意思是对训练集训练1000次
model = LogisticRegression(max_iter=1000)
2、训练模型,代码如下:
model.fit(data_train, target_train)
# 查看模型在训练集上的得分,为0.99
model.score(data_train, target_train)
# 查看模型在测试集上的打分,为0.96
model.score(data_test, target_test)
3、混淆矩阵
4、分类报告
第14题 预估目标列编码
DataFrame如下:
如何对target列进行数值的编码,转换成1、0的形式?这里需要借助sklearn的LabelEncoder,完整代码如下:
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
df = pd.DataFrame({'name': ['Zhangsan', 'Lisi', 'Wangwu', 'Zhaosi', 'Maliu', 'Zhouqi'],'hobby': ['basketball', 'football', 'badminton', np.nan, 'Table Tennis', np.nan],'gender': ['male', 'female', 'male', 'male', np.nan, 'female'],'weight': [130, 136, 120, 170, np.nan, np.nan],'target': ['yes', 'yes', 'no', 'yes', 'no', 'yes']
})
labelEncoder = LabelEncoder()
df['target'] = labelEncoder.fit_transform(df['target'])
再来看一下新的DataFrame:
逆转换,查看或者再转换为原来的列:
labelEncoder.inverse_transform(df['target'])
得到如下结果:array([‘yes’, ‘yes’, ‘no’, ‘yes’, ‘no’, ‘yes’], dtype=object)
第15题 one-hot编码
DataFrame如下,如何对score列进行one-hot编码?
使用sklearn的OneHotEncoder类,完整代码如下:
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
df = pd.DataFrame({'name': ['Zhangsan', 'Lisi', 'Wangwu', 'Zhaosi', 'Maliu', 'Zhouqi'],'hobby': ['basketball', 'football', 'badminton', np.nan, 'Table Tennis', np.nan],'gender': ['male', 'female', 'male', 'male', np.nan, 'female'],'score': ['good', 'bad', 'normal', 'normal', 'good', 'good'],'weight': [130, 136, 120, 170, np.nan, np.nan],'target': ['yes', 'yes', 'no', 'yes', 'no', 'yes']
})oneHotEncoder = OneHotEncoder(sparse_output=False)
oneHotEncoder.fit(df[['score']])
oneHotEncoder.transform(df[['score']])
得到的结果如下:
如何查看该数组中的元素对应的是原来的哪个分类呢?使用oneHotEncoder的categories_属性: