AI应用开发相关目录
本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧
适用于具备一定算法及Python使用基础的人群
- AI应用开发流程概述
- Visual Studio Code及Remote Development插件远程开发
- git开源项目的一些问题及镜像解决办法
- python实现UDP报文通信
- python实现日志生成及定期清理
- Linux终端命令Screen常见用法
- python实现redis数据存储
- python字符串转字典
- python实现文本向量化及文本相似度计算
- python对MySQL数据的常见使用
- 一文总结python的异常数据处理示例
文章目录
- AI应用开发相关目录
- 一、前言
- 二、代码示例
一、前言
数据是一切应用开发的基础,异常数据处理可以保障数据质量。
本文总结了基于数据分布、聚类算法、树、距离以及概率的异常数据处理算法及其示例。
二、代码示例
数据
基于数据分布的异常处理算法
# 基于箱线图的异常数据检测
KW_data = data['线路长度'].tolist()
Q1 = np.quantile(KW_data,0.25,interpolation='lower')#下四分位数
Q3 = np.quantile(KW_data,0.75,interpolation='higher')#上四分位数
QE = Q3-Q1
max_value = Q3+1.5*QE
min_value = Q3-1.5*QE
error_index = []
for i in range(len(KW_data)):
if (KW_data[i]>= min_value) and (KW_data[i] <= max_value):
pass
else:
error_index.append(i)
基于聚类算法的异常处理算法
# DBSCAN聚类
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
# 创建数据集
X = np.array(data[['线路长度','导线长度','塔材','挂线金具','混凝土','土石方熨','本体投资']])
# 对数据进行标准化处理
X = StandardScaler().fit_transform(X)
# 使用DBSCAN算法进行聚类
dbscan = DBSCAN(eps=0.3, min_samples=2)
dbscan.fit(X)
# 获取异常数据的索引
outliers_mask = dbscan.labels_ == -1
outliers_indices = np.where(outliers_mask)[0]
# 输出异常数据的索引
print("异常数据的索引:", outliers_indices)
基于树的异常处理算法
# 基于孤立森林的异常数据检测
import numpy as np
from sklearn.ensemble import IsolationForest
import matplotlib.pyplot as plt
# 生成示例数据
X = np.array(data[['塔材','本体投资']])# 可多
# 使用孤立森林算法进行异常检测
clf = IsolationForest(contamination='auto')
pred = clf.fit_predict(X)
# 将预测结果可视化
plt.scatter(X[:, 0], X[:, 1], c=pred)
plt.show()
基于数据间距的异常处理算法
# 基于局部异常因子的异常检测算法
import numpy as np
from sklearn.neighbors import LocalOutlierFactor
# 生成示例数据
X = np.array(data[['塔材','本体投资']])# 可多
# 使用局部异常因子算法进行异常检测
clf = LocalOutlierFactor(n_neighbors=20, contamination='auto')
pred = clf.fit_predict(X)
# 将预测结果可视化
plt.scatter(X[:, 0], X[:, 1], c=pred)
plt.show()
基于概率的异常处理算法
# 示例数据集
db_path = os.getcwd()+'\\db.sqlite3'
# 数据读取
gradedb = sqlite3.connect(db_path)
cursor=gradedb.cursor()
cursor.execute("SELECT * FROM returning_files_table;")
Tables=cursor.fetchall()
raw_data = []
for i in Tables:
raw_data.append([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]])
raw_data = pd.DataFrame(raw_data, columns=['标段', '线路长度', '导线长度', '塔材', '挂线金具', '盘型绝缘子', '混凝土', '土石方熨', '本体投资'])
a0 = raw_data['标段'].tolist()
a1 = [float(i) for i in raw_data['线路长度']]
a2 = [float(i) for i in raw_data['导线长度']]
a3 = [float(i) for i in raw_data['塔材']]
a4 = [float(i) for i in raw_data['挂线金具']]
a5 = raw_data['盘型绝缘子'].tolist()
a6 = [float(i) for i in raw_data['混凝土']]
a7 = [float(i) for i in raw_data['土石方熨']]
a8 = [float(i) for i in raw_data['本体投资']]
data = []
for i in range(len(a0)):
data.append([a0[i],a1[i],a2[i],a3[i],a4[i],a5[i],a6[i],a7[i],a8[i]])
data = pd.DataFrame(data, columns=['标段', '线路长度', '导线长度', '塔材', '挂线金具', '盘型绝缘子', '混凝土', '土石方熨', '本体投资'])
# 从数据集中删除PassengerId,Name变量
data.drop(['标段'], axis=1, inplace=True)
data = data[['线路长度','导线长度','塔材','挂线金具','混凝土','土石方熨','本体投资']]
data.head()
import pandas as pd
from sksos import SOS
X = np.array(data[['塔材','本体投资']]) # 两个维度
detector = SOS()
data["score"] = detector.predict(X)
data.sort_values("score", ascending=False).head(10)