感知机

99 阅读1分钟

##载入相关模块

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from collections import Counter

iris = load_iris()

df = pd.DataFrame(iris.data,columns = iris.feature_names)

df['label'] = iris.target

df.columns = ['sepal length','speal width','petal length','petal width','label']

data = np.array(df.iloc[:100,[0,1,-1]])

X,y = data[:,:-1],data[:,-1]

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)

载入sklearn中的感知机模块

import sklearn

from sklearn.linear_model import Perceptron

clf = Perceptron(fit_intercept = True,

            max_iter = 1000,
            
            shuffle = True)

clf.fit(X_train,y_train)

输出感知机参数

print(clf.coef_)

画图

##画布大小

plt.figure(figsize=(10,10))

##中文标题

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus'] = False

plt.title('鸢尾花线性数据示例')

plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa',)

plt.scatter(data[50:100, 0], data[50:100, 1], c='orange', label='Iris-versicolor')

#画感知机的线

x_ponits = np.arange(4, 8)

y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]

plt.plot(x_ponits, y_)

#其他部分

plt.legend() # 显示图例

plt.grid(False) # 不显示网格

plt.xlabel('sepal length')

plt.ylabel('sepal width')

plt.legend()