1. 特征预处理
1.1 归一化
归一化(Normalization)是数据预处理中的一种常用技术,目的是将数据的数值范围调整到一个特定的区间,通常是[0, 1],以便于不同特征之间的比较和加权。
from sklearn.preprocessing import MinMaxScaler
# 1. 准备数据
data = [[9, 2, 10, 5],
[6, 4, 15, 4],
[7, 3, 12, 4]]
# 2. 初始化归一化对象
transformer = MinMaxScaler()
# 3. 对原始特征进行变换
data = transformer.fit_transform(data)
# 4. 打印归一化后的结果
print(data)
1.2 标准化
标准化(Standardization)是数据预处理的一种技术,它将数据转换为均值为0,标准差为1的分布。
from sklearn.preprocessing import StandardScaler
# 1. 准备数据 v
data = [[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]]
# 2. 初始化标准化对象
transformer = StandardScaler()
# 3. 对原始特征进行变换
data = transformer.fit_transform(data)
# 4. 打印归一化后的结果
print(data)
# 5 打印每1列数据的均值和标准差
print('transformer.mean_-->', transformer.mean_)
print('transformer.var_-->', transformer.var_)
2. KNN算法对鸢尾花分类
2.1 操作流程
1 获取数据集
2 数据基本处理
3 数据集预处理-数据标准化
4 机器学习(模型训练)
5 模型评估
6 模型预测
2.2 代码演示
2.2.1利用KNN算法对鸢尾花分类 -加载鸢尾花数据集
from sklearn.datasets import load_iris
def dm01_traintest_split():
# 加载鸢尾花数据集, 并显示属性
# dataset.data .target .target_names .feature_names .DES
# 加载数据集
mydataset = load_iris()
# 查看数据集信息
print('\n查看数据集信息-->\n', mydataset.data[:5])
# 查看目标值
print('dataset.target-->\n', mydataset.target)
# 查看目标值名字
print('dataset.target_names-->\n', mydataset.target_names)
# 查看特征名
print('dataset.feature_names-->\n', mydataset.feature_names)
# 查看数据集描述
print('\ndataset.DESCR-->\n', mydataset.DESCR)
# 数据文件路径
print('dataset.filename-->\n', mydataset.filename)
dm01_traintest_split()
2.2.2 利用KNN算法对鸢尾花分类 -加载鸢尾花数据集
def dmo2_irisdata_show():
iris_df = pd.DataFrame(iris_data['data'], columns=iris_data.feature_names)
print(iris_df)
iris_df['target'] = iris_data.target
print(iris_df)
feature_names = list(iris_data.feature_names)
print(feature_names)
for i in range(len(feature_names)):
for j in range(i + 1, len(feature_names)):
col1 = feature_names[i]
col2 = feature_names[j]
sns.lmplot(x=col1, y=col2, hue='target', data=iris_df, fit_reg=False)
plt.xlabel(col1)
plt.ylabel(col2)
plt.title(f'{col1} vs {col2}')
plt.show()
dmo2_irisdata_show()
2.2.3利用KNN算法对鸢尾花分类 - 数据集划分
from sklearn.model_selection import train_test_split
# 数据集划分
def dm03_traintest_split():
mydataset = load_iris()
# 2 划分数据集
X_train, X_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target,
test_size=0.3, random_state=22)
print('数据总数量', len(mydataset.data))
print('训练集中的x-特征值', len(X_train))
print('测试集中的x-特征值', len(X_test))
print(y_train)
dm03_traintest_split()
2.2.4利用KNN算法对鸢尾花分类 – 模型训练
# 导入类库
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
def dm04_模型训练和预测():
# 1 获取数据集
mydataset = load_iris()
# 2 数据基本处理
x_train, x_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target, test_size=0.2,random_state=22)
# 3 数据集预处理-数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
# 让测试集的均值和方法, 转换测试集数据;
x_test = transfer.transform(x_test)
# 4 机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)
# 5 模型评估 直接计算准确率 100个样本中模型预测对了多少
myscore = estimator.score(x_test, y_test)
print('myscore-->', myscore)
# 6 模型预测 # 需要对待预测数据,执行标准化
print('通过模型查看分类类别-->', estimator.classes_)
mydata = [[5.1, 3.5, 1.4, 0.2],
[4.6, 3.1, 1.5, 0.2]]
mydata = transfer.transform(mydata)
print('mydata-->', mydata)
mypred = estimator.predict(mydata)
print('mypred-->\n', mypred)
mypred = estimator.predict_proba(mydata)
print('mypred-->\n', mypred)
dm04_模型训练和预测()
2.2.5 利用KNN算法对鸢尾花分类 – 模型评估
# 1 获取数据集
mydataset = load_iris()
# 2 数据基本处理
x_train, x_test, y_train, y_test = train_test_split(mydataset.data, mydataset.target, test_size=0.2, random_state=22)
# 3 数据集预处理-数据标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
# 让测试集的均值和方法, 转换测试集数据;
x_test = transfer.transform(x_test)
# 4 机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)
# 5-1 直接使用score函数 模型评估 100个样本中模型预测对了多少
myscore = estimator.score(x_test, y_test)
print('myscore-->', myscore)
# 5-2 利用sklearn.metrics包中的 accuracy_score 方法
y_predict = estimator.predict(x_test)
myresult = accuracy_score(y_test, y_predict)
print('myresult-->', myresult)