8 篇文章 2 订阅

## 前言

Problem-Based Learning.

w(ﾟДﾟ)w 要长脑子了！

❤️ ❤️ ❤️ ❤️

## 使用scikit-learn完成机器学习任务

### Python 编程实现

import numpy as np
import pandas as pd
# 鸢尾花数据集，红酒数据集，乳腺癌数据集，糖尿病数据集

# 回归重要指标
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
# 分类重要指标
from sklearn.metrics import accuracy_score, confusion_matrix, f1_score, precision_recall_curve, roc_auc_score

#训练集训练集分类器
from sklearn.model_selection import train_test_split

import graphviz #画文字版决策树的模块
import pydotplus #画图片版决策树的模块
from IPython.display import Image #画图片版决策树的模块

print(iris.data)              # 数据I
print(iris.target_names)      # 标签名
print(iris.target)            # 标签值
print(iris.feature_names)     # 特证名(列名)

iris_dataframe = pd.concat([pd.DataFrame(iris.data),pd.DataFrame(iris.target)],axis=1)
print(iris_dataframe)

Xtrain, Xtest, Ytrain,Ytest = train_test_split(iris.data,iris.target,test_size=0.3)



from sklearn.discriminant_analysis import LinearDiscriminantAnalysis  # 导入LDA模型
from sklearn.svm import SVC                                           # 导入SVM模型（支持向量机）从中调用SVC模型 （支持向量机分类）
from sklearn.linear_model import LogisticRegression,LinearRegression
from sklearn.neighbors import KNeighborsRegressor,KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeRegressor,DecisionTreeClassifier
from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier
from sklearn.ensemble import ExtraTreesRegressor,ExtraTreesClassifier

clf = RandomForestClassifier()
clf.fit(Xtrain, Ytrain)
Ypredict=clf.predict(Xtest)
print(r2_score(Ytest,Ypredict))

# 其中，决策树、随机森林等具有树形结构的基学习器可以把树形结构打印出来并保存为PDF或png文件

from sklearn import tree

clf = clf.estimators_[0]

tree_data = tree.export_graphviz(

clf

,feature_names =iris.feature_names

,class_names = iris.target_names#也可以自己起名

,filled = True #填充颜色

,rounded = True #决策树边框圆形/方形

)

graph1 = graphviz.Source(tree_data.replace('helvetica','Microsoft YaHei UI'), encoding='utf-8')

graph1.render('./iris_tree')



## 基于距离的KNN模型

### Python 编程实现

scikit-learn 官网 用户指南 12. Choosing the right estimator
https://scikit-learn.org/stable/machine_learning_map.html

from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.7,random_state=42)


from sklearn.neighbors import KNeighborsRegressor,KNeighborsClassifier

clf = KNeighborsClassifier()    # 参数n_neighbors=5（默认k值为5）
clf.fit(x_train, y_train)
y_predict=clf.predict(x_test)
print(accuracy_score(y_test,y_predict))



# 我们很容易得到距离的计算方法
def distance(a,b):
return np.sqrt(np.sum(np.square(a-b)))

# 针对单一样本，如何得到它最近的K个节点并投票呢？
# 我们说，首先要计算它到其他点的距离，然后找最近的K个抽出来，计数。
# 因此，如果训练数据集已知，可以写函数并进行封装就可以包装为：
def KNN(x_train,y_train,x_test,k):
# 定义一个内部函数，用于计算测试样本的预测标签
def get_label(x):
dist=list(map(lambda a:distance(a,x),x_train))  # 使用map函数，对于x_train中的每一个训练样本a，map都会执行distance(a, x)。结果存储在dist列表中
ind=np.argsort(dist)                            # 对距离进行排序，得到距离从小到大的索引
ind=ind[:k]                                     # 取出距离最小的前k个索引
# 初始化一个长度为3的数组，用于统计，返回票数最多的类别作为预测标签
labels=np.zeros(3)
for i in ind:
label = y_train[i].astype(int)
labels[label] += 1
return np.argmax(labels)

# 初始化一个数组，用于存储所有测试样本的预测标签。
y_predict = np.zeros(len(x_test))
for i in range(len(x_test)):
y_predict[i]=get_label(x_test[i])
return y_predict

# 最后，使用不同的K值进行测试：
for k in range(1,10):
y_predict=KNN(x_train,y_train,x_test,k)
print(accuracy_score(y_test,y_predict))



## 基于优化的LDA与SVM模型

### LDA 的Python 编程实现

from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.7,random_state=42)


LDA用于分类

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis  # 导入LDA模型

# LDA用于分类
LDA = LinearDiscriminantAnalysis()
LDA.fit(x_train, y_train)
y_predict=LDA.predict(x_test)
print(accuracy_score(y_test,y_predict))


LDA用于降维

import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei','Songti SC','STFangsong']      # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False                              # 用来正常显示负号
# plt.style.use("ggplot")   #风格使用ggplot

# LDA用于降维
LDA = LinearDiscriminantAnalysis(n_components=2)  # 假设我们希望降到2维
LDA.fit(x_train, y_train)
x_train_LDA = LDA.transform(x_train)
x_test_LDA = LDA.transform(x_test)

# 可视化降维后的数据
plt.figure()
# 为每个类单独绘制散点图，并添加标签
label_names = {0: 'Class 0', 1: 'Class 1', 2: 'Class 2'}  # 更新这里的键值对以匹配你的数据
colors = ['r', 'g', 'b']  # 或者使用其他颜色方案
for class_label, color in zip(label_names.keys(), colors):
indices = (y_train == class_label)
plt.scatter(x_train_LDA[indices, 0], x_train_LDA[indices, 1], c=color, label=label_names[class_label])
plt.title('LDA Reduced Data')
plt.xlabel('First LDA component')
plt.ylabel('Second LDA component')
plt.legend()
plt.show()



### SVM 的Python 编程实现

from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.7,random_state=42)


from sklearn.svm import SVC                                           # 导入SVM模型（支持向量机）从中调用SVC模型 （支持向量机分类）

# SVC用于分类
SVC = SVC()
SVC.fit(x_train, y_train)
y_predict=SVC.predict(x_test)
print(accuracy_score(y_test,y_predict))


• 19
点赞
• 8
收藏
觉得还不错? 一键收藏
• 打赏
• 0
评论
11-18 6401
07-19 280
05-29 1016
09-18 425
12-01 2112
01-11 1723
04-08 2万+
12-02 2333

¥1 ¥2 ¥4 ¥6 ¥10 ¥20

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