AI基础

AI,AllenIferson

1.AI基础

1.1应用

棋类游戏

自然语言处理

专家系统

视觉系统

语音识别

手写识别

智能机器人

1.2 Python内库

Numpy

Scipy

matplotlib

nltk

SimpleAI

1.3 常见机器学习算法

1.3.1有监督

分类:决策树,随机森林,SVM(支持向量机),朴素贝叶斯,KNN

回归:逻辑回归,线性回归

1.3.2无监督

聚类:K-means

关联

1.3.3增强学习

马尔可夫决策

1.4预处理数据

import numpy as np
from sklearn import preprocessing

原始数据

input_data = np.array([[2.1, -1.9, 5.5],
                      [-1.5, 2.4, 3.5],
                      [0.5, -7.9, 5.6],
                      [5.9, 2.3, -5.8]])


二值化,阈值为0.5

data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)


平均去除(消除特征向量均值,每个特征都以0为中心)

data_scale=preprocessing.scale(input_data)

缩放(缩放特征向量)

data_scaler_minmax=preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaler_minmax=data_scaler_minmax.fit_transform(input_data)

2.分类模型

2.1 朴素贝叶斯模型有三个类型

Gaussian(高斯),Multinomial(多项式)和Bernoulli(伯努利)

import numpy as np
import sklearn
#导入数据
from sklearn.datasets import load_breast_cancer
data=load_breast_cancer()

label_name=data['target_names'] #标签
labels=data['target']
feature_names=data['feature_names']  #特征
features=data['data']

#切分数据为 训练 测试集
from sklearn.model_selection import train_test_split
train,test,train_labels,test_labels=train_test_split(features,labels,test_size=0.1,random_state=42)

#建立模型
from sklearn.naive_bayes import GaussianNB  #朴素贝叶斯中的高斯分类器

gnb=GaussianNB()
model=gnb.fit(train,train_labels)  #训练数据

#测试集,评估模型准确性
pred=gnb.predict(test)

#准确性比较
from sklearn.metrics import  accuracy_score
print(accuracy_score(test_labels,pred))

使用模型,暂时可以通过gnb.predict函数(data数组)可得到label标签

2.2 逻辑回归

import numpy as np
import matplotlib.pylab as plt
from sklearn import linear_model

#结果可视化函数
def logistic_visualize(classifier,X,y):
      #边界
      min_x,max_x=X[:,0].min()-1.0,X[:,0].max()+1.0
      min_y,max_y=X[:,1].min()-1.0,X[:,1].max()+1.0
      step=0.02 #步长
      #生成网格内全部点
      X_val,y_val=np.meshgrid(np.arange(min_x,max_x,step),
                              np.arange(min_y,max_y,step))

      output=classifier.predict(np.c_[X_val.ravel(),y_val.ravel()]) #预测
      output=output.reshape(X_val.shape)
      #画图
      plt.figure()
      plt.pcolormesh(X_val,y_val,output,cmap=plt.cm.gray)

      plt.scatter(X[:,0],X[:,1],c=y,s=75,edgecolors='black',linewidths=1,cmap=plt.cm.Paired)
      #指定图的边界
      plt.xlim(X_val.min(), X_val.max())
      plt.ylim(y_val.min(), y_val.max())
      plt.xticks((np.arange(int(X[:, 0].min() - 1), int(X[:, 0].max() + 1), 1.0)))
      plt.yticks((np.arange(int(X[:, 1].min() - 1), int(X[:, 1].max() + 1), 1.0)))
      plt.show()

#data
X = np.array([[2, 4.8], [2.9, 4.7], [2.5, 5], [3.2, 5.5], [6, 5], [7.6, 4],
              [3.2, 0.9], [2.9, 1.9],[2.4, 3.5], [0.5, 3.4], [1, 4], [0.9, 5.9]])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3])

#线性分类器中的 逻辑分类器
Classifier=linear_model.LogisticRegression(solver='liblinear',C=75)
#训练
Classifier.fit(X,y)
logistic_visualize(Classifier,X,y)

数据可视化中,用np生成点,最后用plt画出来

2.3随机森林

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()
import matplotlib.pylab as plt
from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.4,random_state=0)
#随机森林模型
forest=RandomForestClassifier(n_estimators=50,random_state=0)
forest.fit(X_train,y_train)

from sklearn.metrics import accuracy_score

print(accuracy_score(forest.predict(X_test),y_test))
#print(forest.score(X_test,y_test)) 一样的准确性结果

#结果可视化,使用plt,显示特征重要性表
n_feature=cancer.data.shape[1]
plt.barh(range(n_feature),forest.feature_importances_,align='center')
plt.yticks(np.arange(n_feature),cancer.feature_names)
plt.xlabel("Feature Importance")# x,y轴的标签
plt.ylabel("Feature")
plt.show()

使用随机森林模型的feature_importances进行可视化。

2.4分类器性能

分类性能指标,如平均准确率,AUC等

混淆矩阵

img

在上面的混淆矩阵中,1表示正类,0表示负类。
以下是与混淆矩阵相关的术语 -

  • 真正 - 当实际的数据点类别为1并且预测也为1时,TP就是这种情况。
  • 真负 - 当数据点的实际类别为0并且预测也为0时,TN就是这种情况。
  • 假正 - 当实际的数据点类别为0并且预测也为1时,FP就是这种情况。
  • 假负 - FN是数据点的实际类别为1且预测也为0的情况。
2.4.1准确性Accuracy

img

2.4.2精确Precision

被预测出来的1,有多少是对的

img

2.4.3召回(灵敏度)Recall

实际1中有多少被预测出来了

img

2.4.4特异性Specificity

实际的0多少被预测出来了

img

3. 回归模型

3.1线性回归

reg_linear=linear_model.LinearRegression()
#线性回归器

plt可视化

plt.scatter(X_test,y_test,color='red')
plt.plot(X_test,y_test_pred,color='black',linewidth=2)
plt.xticks(())
plt.yticks(())
plt.show()

plt.scatter(x,y,color) 散点图

plt.plot(x,y,color,linewidth)连线图

plt.xticks() x轴刻度尺

多变量回归

from sklearn.preprocessing import PolynomialFeatures

ploynomial=PolynomialFeature(degree=10)#10阶多项式
X_train_transformed=ploynomial.fit_transform(X_train)

ploy_linear_model=linear_model.LinearRegression()
ploy_linear_model.fit(X_train_transformed,y_train)

4 聚类算法

4.1K-means

1.指定K个元组的数量

2.根据集群数量对数据分类,确定质心

import matplotlib.pylab as plt
from sklearn.cluster import  KMeans
import numpy as np

from sklearn.datasets._samples_generator import make_blobs
#生成四个blob的二维数据集,数量,中心个数,集群标准,随机状态

X,y_true=make_blobs(n_samples=500,centers=5,cluster_std=0.80,random_state=0)

#plt.scatter(X[:,0],X[:,1],s=50)
#plt.show()

kmeans=KMeans(n_clusters=5)

kmeans.fit(X)
y_predict=kmeans.predict(X)
print(y_predict)
plt.scatter(X[:,0],X[:,1],c=y_predict,s=50,cmap='viridis')#colormap 为viridis

centers=kmeans.cluster_centers_  #训练后的中心

plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
plt.show()

plt.scatter()中 c既可以是“black”也可以是与data数量一致的0-n种颜色的数组。

4.2MeanShift均值偏移

import numpy as np
from sklearn.cluster import MeanShift #从聚类库导入,均值偏移算法
import matplotlib.pylab as plt
from matplotlib import  style
style.use("ggplot")

from sklearn.datasets._samples_generator import make_blobs

centers=[[2,2],[15,2],[5,10]]
X,y=make_blobs(n_samples=500,centers=centers,cluster_std=1,random_state=0)
#plt.scatter(X[:,0],X[:,1])
#plt.show()

#model     fit
ms=MeanShift()
ms.fit(X)
lables=ms.labels_       #labels属于哪类
#print(lables)
cluster_center=ms.cluster_centers_

print(cluster_center)

#plt
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
    plt.plot(X[i][0],X[i][1],colors[lables[i]],markersize=10)

#聚类中心
plt.scatter(cluster_center[:,0],cluster_center[:,1],marker='x',c='k',s=150,linewidths=5,zorder=10)
plt.show()

先画所以二维坐标的点,然后画聚类中心进行标记。

shiftmean不需要手动确定k值,即cluster_centers_的个数。

4.3测量群集性能

轮廓分析,测量群集见距离,给出轮廓分数,此分数衡量集群中每个点与相邻群集中点的距离。

+1分,样本距离别的集群很远

0 两个相邻集群很近

len(X)):
plt.plot(X[i][0],X[i][1],colors[lables[i]],markersize=10)

#聚类中心
plt.scatter(cluster_center[:,0],cluster_center[:,1],marker=‘x’,c=‘k’,s=150,linewidths=5,zorder=10)
plt.show()


先画所以二维坐标的点,然后画聚类中心进行标记。

shiftmean不需要手动确定k值,即cluster_centers_的个数。

### 4.3测量群集性能

轮廓分析,测量群集见距离,给出轮廓分数,此分数衡量集群中每个点与相邻群集中点的距离。

+1分,样本距离别的集群很远

0    两个相邻集群很近

-1   样本被分配到错误群集
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值