分类算法python
⑴ 如何用python实现随机森林分类
大家如何使用scikit-learn包中的类方法来进行随机森林算法的预测。其中讲的比较好的是各个参数的具体用途。
这里我给出我的理解和部分翻译:
参数说明:
最主要的两个参数是n_estimators和max_features。
n_estimators:表示森林里树的个数。理论上是越大越好。但是伴随着就是计算时间的增长。但是并不是取得越大就会越好,预测效果最好的将会出现在合理的树个数。
max_features:随机选择特征集合的子集合,并用来分割节点。子集合的个数越少,方差就会减少的越快,但同时偏差就会增加的越快。根据较好的实践经验。如果是回归问题则:
max_features=n_features,如果是分类问题则max_features=sqrt(n_features)。
如果想获取较好的结果,必须将max_depth=None,同时min_sample_split=1。
同时还要记得进行cross_validated(交叉验证),除此之外记得在random forest中,bootstrap=True。但在extra-trees中,bootstrap=False。
这里也给出一篇老外写的文章:调整你的随机森林模型参数http://www.analyticsvidhya.com/blog/2015/06/tuning-random-forest-model/
这里我使用了scikit-learn自带的iris数据来进行随机森林的预测:
[python]view plain
fromsklearn.
fromsklearn.
importnumpyasnp
fromsklearn.datasetsimportload_iris
iris=load_iris()
#printiris#iris的4个属性是:萼片宽度萼片长度花瓣宽度花瓣长度标签是花的种类:setosaversicolourvirginica
printiris['target'].shape
rf=RandomForestRegressor()#这里使用了默认的参数设置
rf.fit(iris.data[:150],iris.target[:150])#进行模型的训练
#
#随机挑选两个预测不相同的样本
instance=iris.data[[100,109]]
printinstance
print'instance0prediction;',rf.predict(instance[0])
print'instance1prediction;',rf.predict(instance[1])
printiris.target[100],iris.target[109]
- 返回的结果如下:
- (150,)
- [[ 6.3 3.3 6. 2.5]
- [ 7.2 3.6 6.1 2.5]]
- instance 0 prediction; [ 2.]
- instance 1 prediction; [ 2.]
- 2 2
- 在这里我有点困惑,就是在scikit-learn算法包中随机森林实际上就是一颗颗决策树组成的。但是之前我写的决策树博客中是可以将决策树给显示出来。但是随机森林却做了黑盒处理。我们不知道内部的决策树结构,甚至连父节点的选择特征都不知道是谁。所以我给出下面的代码(这代码不是我的原创),可以显示的显示出所有的特征的贡献。所以对于贡献不大的,甚至是负贡献的我们可以考虑删除这一列的特征值,避免做无用的分类。
fromsklearn.cross_validationimportcross_val_score,ShuffleSplit
X=iris["data"]
Y=iris["target"]
names=iris["feature_names"]
rf=RandomForestRegressor()
scores=[]
foriinrange(X.shape[1]):
score=cross_val_score(rf,X[:,i:i+1],Y,scoring="r2",
cv=ShuffleSplit(len(X),3,.3))
scores.append((round(np.mean(score),3),names[i]))
printsorted(scores,reverse=True)
- 显示的结果如下:
- [(0.934, 'petal width (cm)'), (0.929, 'petal length (cm)'), (0.597, 'sepal length (cm)'), (0.276, 'sepal width (cm)')]
- 这里我们会发现petal width、petal length这两个特征将起到绝对的贡献,之后是sepal length,影响最小的是sepal width。这段代码将会提示我们各个特征的贡献,可以让我们知道部分内部的结构。
[python]view plain
⑵ python算法有哪些
Python算法的特征
1. 有穷性:算法的有穷性指算法必须能在执行有限个步骤之后终止;
2. 确切性:算法的每一步骤必须有确切的定义;
3. 输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
4. 输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果,没有输出的算法是毫无意义的;
5. 可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行操作步,即每个计算步都可以在有限时间内完成;
6. 高效性:执行速度快、占用资源少;
7. 健壮性:数据响应正确。
Python算法分类:
1.
冒泡排序:是一种简单直观的排序算法。重复地走访过要排序的数列,一次比较两个元素,如果顺序错误就交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该排序已经完成。
2.
插入排序:没有冒泡排序和选择排序那么粗暴,其原理最容易理解,插入排序是一种最简单直观的排序算法啊,它的工作原理是通过构建有序序列,对于未排序数据在已排序序列中从后向前排序,找到对应位置。
3.
希尔排序:也被叫做递减增量排序方法,是插入排序的改进版本。希尔排序是基于插入排序提出改进方法的排序算法,先将整个待排序的记录排序分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全记录进行依次直接插入排序。
4. 归并排序:是建立在归并操作上的一种有效的排序算法。该算法是采用分治法Divide and的一个非常典型的应用。
5. 快速排序:由东尼·霍尔所发展的一种排序算法。又是一种分而治之思想在排序算法上的典型应用,本质上快速排序应该算是冒泡排序基础上的递归分治法。
6.
堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质,即子结点的键值或索引总是小于它的父结点。
7.
计算排序:其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中,作为一种线性时间复杂度的排序,计算排序要求输入的数据必须是具有确定范围的整数。
⑶ 链寸礌璐濆彾鏂鍒嗙被绠楁硶镄剆klearn瀹炵幇
1銆佽儗鏅
銆婃満鍣ㄥ︿範瀹炴垬銆嫔綋涓锛岀敤python镙规嵁璐濆彾鏂鍏寮忓疄鐜颁简锘烘湰镄勫垎绫荤畻娉曘傜幇鍦ㄦ潵鐪嬬湅鐢╯klearn锛屽备綍瀹炵幇銆傝缮𨰾夸箣鍓岖殑渚嫔瓙锛屽瑰笘瀛愮殑鍒嗙被銆傛暟鎹濡备笅锛
琛ュ厖锛氶樼洰镄勫煎乏杈规槸鍑犱釜浜虹殑璇勮猴纴鍙宠竟鏄璇勮哄睘浜庝井杈辩被锛1锛夈佹e父绫伙纸0锛夛纴闇瑕佽繘琛屾枃链鍒嗙被锛屼笖鍐嶆湁鏂扮殑鏂囨湰杩囨潵镞惰兘镊锷ㄥ垝鍒呜呖0鎴1銆
2銆佸垎绫
锛1锛夌畻娉旷殑鍑嗗
阃氲繃镆ョ湅sklearn镄勮缁冩ā鍨嫔嚱鏁帮纴fit(X, Y)锛屽彂鐜板彧闇瑕佸嗳澶囦袱涓鍙傛暟銆备竴涓鏄鏁版嵁镄勭烦阒碉纴鍙︿竴涓鏄鏁版嵁镄勫垎绫绘暟缁勚傞栧厛灏辨槸灏嗕互涓婄殑鏂囨湰杞鍖栨垚鐭╅樀銆
鍦ㄥ墠涓绔犲叾瀹炲凡缁忚茶В杩囧备綍灏嗘枃链杞鍖栨垚鐭╅樀銆傝繖閲屽皢绀烘剰镄勫啀琛ュ厖涓嬨
a.棣栧厛阃夊彇镓链夌殑鍗曡瘝锛屽舰鎴愬垪锛屼篃鍙鐞呜В涓哄睘镐с备緥濡傦细
b.鍏舵″皢阆嶅巻姣忎釜鏂囨湰锛屽~婊′笂杩板垪镄勫笺傛枃链鍑虹幇杩囧垪镄勬★纴濉涓銆傛病链夊嚭鐜拌繃濉0銆傛瘆濡傜涓鍙ュ氨鏄锛歮y dog has flea problems help please锛屽彲琛ㄧず涓猴细
钖岀悊镓链夌殑鏂囨湰閮藉彲濡傛よ〃绀猴纴镓浠ュ氨褰㈡垚浜嗕竴涓鏁板瓧镄勭烦阒点
锛2锛塨eyes妯″瀷镄勯夋嫨
鍦ㄥ畬鎴愭暟鎹镄勫嗳澶囦互钖庯纴灏卞彲浠ョ洿鎺ヨ皟鐢╯klearn镄勬ā鍨嫔拰鍑芥暟瀹屾垚妯″瀷镄勮缁冨暒銆备絾鍦╞eyes妯″瀷镄勯夋嫨镄勬椂鍊椤彂鐜帮纴beyes涓嬫湁澶氢釜妯″瀷鍙阃夋嫨锛屾墍浠ヨ繖涓浼氲╀汉绾犵粨銆傛帴涓嬫潵鍏卞悓浜呜В涓嬭繖浜涙ā鍨嬶细
a.楂樻柉妯″瀷锛圙aussianNB锛
楂樻柉妯″瀷鏄瀵逛簬姣忎釜灞炴х殑鍊兼槸杩炵画镄勶纴涓旀湇浠庨珮鏂鍒嗗竷镞跺彲浣跨敤锛
姣斿备汉镄勮韩楂桡纴姣斿傝姳镄勯珮搴︾瓑绛夈傚綋铹朵綘涔熷彲灏呜繖浜涙暟鎹绂绘暎鍖栵纴姣斿傛寜绛夎窛鍒掑垎銆佺瓑棰戝垝鍒嗘垚绂绘暎镄勫硷纴浣嗗彲鑳芥晥鏋滈兘娌℃湁鐩存帴鐢ㄩ珮鏂妯″瀷𨱒ヨ$畻镄勫ソ銆
鐢ㄦ硶锛歝lass sklearn.naive_bayes.GaussianNB
鍙傛暟锛氭棤
b.澶氶”寮忔ā鍨嬶纸MultinominalNB锛
濡傛灉澶ч儴鍒嗘槸澶氩厓绂绘暎鍊硷纴鍒欓噰鐢ㄥ氶”寮忔ā鍨嬭佸ソ浜涖傚氶”寮忔ā鍨嬶纴阃氩父灏辨槸鏋勯犲弬鏁板悜閲忥纴铹跺悗阃氲繃鏋佸ぇ浼肩劧浼拌℃潵瀵绘眰鍙傛暟镄勬渶链夊笺
杩欓噷鍙绠鍗旷殑鐣ュ垪涓浜涘叕寮忥纴鍏蜂綋鍙镆ヨ㈡洿澶氲祫鏂欍备粠杩欎釜璁$畻杩囩▼涓鍙寰楀嚭锛岃繖閲屽紩鍏ュ暒涓涓骞虫粦鍏堥獙鍊糰lpha锛岃繖涓鍊煎湪妯″瀷璁缁幂殑镞跺欎篃浼氱敤鍒般傞氩父alpha>0锛屽彲寮曞叆涓嶅湪璁缁冮泦镄勭壒寰侊纴灏ゅ叾褰揳lpha=1锛屾垚涓烘媺鏅𨰾変笣骞虫粦銆傚叿浣揳lpha鍙栧煎规ā鍨嬬殑褰卞搷鍙闄勪欢镄勫浘銆
鐢ㄦ硶锛歝lass sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)
鍙傛暟锛
alpha锛氭诞镣规暟锛屽氨鏄涓婅堪璇寸殑寮曞叆骞虫粦镄勫硷绂
fit_prior锛歜ool鍊硷纴濡傛灉涓篢ure锛屽垯涓岖敤铡诲︿範P(y=ck),浠ュ潎鍖鍒嗗竷镟夸唬锛屽惁鍒椤垯铡诲︿範P锛坹=ck锛夛纸涓嶆哕锛
class_prior:涓涓鏁扮粍銆傚畠鎸囧畾浜嗘疮涓鍒嗙被镄勫厛楠屾傜巼P(y=c1),P(y=c2)钬..,鑻ユ寚瀹氢简璇ュ弬鏁
鍒欐疮涓鍒嗙被镄勫厛楠屾傜巼镞犻渶瀛︿範 锛堜笉镍傦级
c.浼锷鍒╂ā鍨嬶纸BernoulliNB锛
濡傛灉鐗瑰緛鍊间负浜屽厓绂绘暎鍊兼垨鏄绋鐤忕殑澶氩厓绂绘暎鍊硷纴鍒椤彲閲囩敤浼锷鍒╂ā鍨嬨
鍏寮忥细class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture,
class_prior=None)
鍙傛暟锛
binarize:涓涓娴镣规暟鎴栬匩one锛屽傛灉涓烘诞镣规暟鍒欎互璇ユ暟鍊间负鐣岋纴鐗瑰緛鍊煎ぇ浜庡畠镄勫彇1锛屽皬浜庣殑涓0 銆傚傛灉涓篘one锛屽亣瀹氩师濮嬫暟鎹宸茬粡浜屽煎寲
鍏跺畠鍙傛暟钖屼笂銆
阃氲繃浠ヤ笂镄勬ā鍨嫔规瘆鍜屽垎鏋愶纴鐢变簬鏂囨湰鍒嗘瀽杞鍖栧悗鏄寰埚氢簩椤瑰彇鍊肩殑绋鐤忕烦阒碉纴锲犳ら夊彇浼锷鍒╂ā鍨嬫晥鏋滀细镟翠匠銆
琛ュ厖锛歛lpha銆乥inarize鍊煎规ā鍨嬫晥鏋灭殑褰卞搷
⑷ python分类算法有哪些
常见的分类算法有:
K近邻算法
决策树
朴素贝叶斯
SVM
Logistic Regression
⑸ python scikit-learn 有什么算法
1,前言
很久不发文章,主要是Copy别人的总感觉有些不爽,所以整理些干货,希望相互学习吧。不啰嗦,进入主题吧,本文主要时说的为朴素贝叶斯分类算法。与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的算法)。但其在处理文本分类,邮件分类,拼写纠错,中文分词,统计机器翻译等自然语言处理范畴较为广泛使用,或许主要得益于基于概率理论,本文主要为小编从理论理解到实践的过程记录。
2,公式推断
一些贝叶斯定理预习知识:我们知道当事件A和事件B独立时,P(AB)=P(A)(B),但如果事件不独立,则P(AB)=P(A)P(B|A)。为两件事件同时发生时的一般公式,即无论事件A和B是否独立。当然也可以写成P(AB)=P(B)P(A|B),表示若要两件事同事发生,则需要事件B发生后,事件A也要发生。
由上可知,P(A)P(B|A)= P(B)P(A|B)
推出P(B|A)=
其中P(B)为先验概率,P(B|A)为B的后验概率,P(A|B)为A的后验概率(在这里也为似然值),P(A)为A的先验概率(在这也为归一化常量)。
由上推导可知,其实朴素贝叶斯法就是在贝叶斯定理基础上,加上特征条件独立假设,对特定输入的X(样本,包含N个特征),求出后验概率最大值时的类标签Y(如是否为垃圾邮件),理解起来比逻辑回归要简单多,有木有,这也是本算法优点之一,当然运行起来由于得益于特征独立假设,运行速度也更快。
8. Python代码
# -*-coding: utf-8 -*-
importtime
fromsklearn import metrics
fromsklearn.naive_bayes import GaussianNB
fromsklearn.naive_bayes import MultinomialNB
fromsklearn.naive_bayes import BernoulliNB
fromsklearn.neighbors import KNeighborsClassifier
fromsklearn.linear_model import LogisticRegression
fromsklearn.ensemble import RandomForestClassifier
fromsklearn import tree
fromsklearn.ensemble import GradientBoostingClassifier
fromsklearn.svm import SVC
importnumpy as np
importurllib
# urlwith dataset
url ="-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
#download the file
raw_data= urllib.request.urlopen(url)
#load the CSV file as a numpy matrix
dataset= np.loadtxt(raw_data, delimiter=",")
#separate the data from the target attributes
X =dataset[:,0:7]
#X=preprocessing.MinMaxScaler().fit_transform(x)
#print(X)
y =dataset[:,8]
print(" 调用scikit的朴素贝叶斯算法包GaussianNB ")
model= GaussianNB()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的朴素贝叶斯算法包MultinomialNB ")
model= MultinomialNB(alpha=1)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的朴素贝叶斯算法包BernoulliNB ")
model= BernoulliNB(alpha=1,binarize=0.0)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的KNeighborsClassifier ")
model= KNeighborsClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的LogisticRegression(penalty='l2')")
model= LogisticRegression(penalty='l2')
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的RandomForestClassifier(n_estimators=8) ")
model= RandomForestClassifier(n_estimators=8)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的tree.DecisionTreeClassifier()")
model= tree.DecisionTreeClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的GradientBoostingClassifier(n_estimators=200) ")
model= GradientBoostingClassifier(n_estimators=200)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 调用scikit的SVC(kernel='rbf', probability=True) ")
model= SVC(kernel='rbf', probability=True)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
"""
# 预处理代码集锦
importpandas as pd
df=pd.DataFrame(dataset)
print(df.head(3))
print(df.describe())##描述性分析
print(df.corr())##各特征相关性分析
##计算每行每列数据的缺失值个数
defnum_missing(x):
return sum(x.isnull())
print("Missing values per column:")
print(df.apply(num_missing, axis=0)) #axis=0代表函数应用于每一列
print(" Missing values per row:")
print(df.apply(num_missing, axis=1).head()) #axis=1代表函数应用于每一行"""
⑹ [Python涓庢暟鎹鍒嗘瀽]-17鍒嗙被绠楁硶涓甯哥敤镄勮瘎浠锋寚镙
链鏂囨潵镊缃戠粶锛屽睘浜庡瑰悇璇勪环鎸囨爣镄勬荤粨锛屽傛灉鐪嫔畬涔嫔悗锛岃缮涓嶆槸寰堢悊瑙o纴鍙浠ラ拡瀵规疮涓璇勪环鎸囨爣鍐嶅崟镫鎼灭储涓浜涘︿範璧勬枡銆
瀵逛簬鍒嗙被绠楁硶锛屽父鐢ㄧ殑璇勪环鎸囨爣链夛细
锛1锛埘recision
锛2锛塕ecall
锛3锛塅-score
锛4锛堿ccuracy
锛5锛塕OC
锛6锛堿UC
ps锛氢笉寤鸿缈昏疟鎴愪腑鏂囷纴灏ゅ叾鏄疨recision鍜孉ccuracy锛屽规槗寮曡捣姝т箟銆
娣锋穯鐭╅樀鏄鐩戠潱瀛︿範涓镄勪竴绉嶅彲瑙嗗寲宸ュ叿锛屼富瑕佺敤浜庢瘆杈冨垎绫荤粨鏋滃拰瀹炰緥镄勭湡瀹炰俊鎭銆傜烦阒典腑镄勬疮涓琛屼唬琛ㄥ疄渚嬬殑棰勬祴绫诲埆锛屾疮涓鍒椾唬琛ㄥ疄渚嬬殑鐪熷疄绫诲埆銆
濡傚浘1镓绀猴纴鍦ㄦ贩娣嗙烦阒典腑锛屽寘钖浠ヤ笅锲涚嶆暟鎹锛
a銆佺湡姝(True Positive , TP)锛氲妯″瀷棰勬祴涓烘g殑姝f牱链
b銆佸亣姝(False Positive , FP)锛氲妯″瀷棰勬祴涓烘g殑璐熸牱链
c銆佸亣璐(False Negative , FN)锛氲妯″瀷棰勬祴涓鸿礋镄勬f牱链
d銆佺湡璐(True Negative , TN)锛氲妯″瀷棰勬祴涓鸿礋镄勮礋镙锋湰
镙规嵁杩椤洓绉嶆暟鎹锛屾湁锲涗釜姣旇缉閲嶈佺殑姣旂巼锛屽叾涓璗PR鍜孴NR镟翠负甯哥敤锛
鐪熸g巼(True Positive Rate , TPR)銆愮伒鏁忓害(sensitivity)銆戯细TPR = TP /(TP + FN) 锛屽嵆姝f牱链棰勬祴缁撴灉鏁/ 姝f牱链瀹为檯鏁
锅囱礋鐜(False Negative Rate , FNR) 锛欶NR = FN /(TP + FN) 锛屽嵆琚棰勬祴涓鸿礋镄勬f牱链缁撴灉鏁/姝f牱链瀹为檯鏁
锅囨g巼(False Positive Rate , FPR) 锛欶PR = FP /(FP + TN) 锛屽嵆琚棰勬祴涓烘g殑璐熸牱链缁撴灉鏁 /璐熸牱链瀹为檯鏁
鐪熻礋鐜(True Negative Rate , TNR)銆愮壒寮傚害(specificity)銆戯细TNR = TN /(TN + FP) 锛屽嵆璐熸牱链棰勬祴缁撴灉鏁 / 璐熸牱链瀹为檯鏁
1)(Precision): P = TP/(TP+FP)
2)(Recall): R = TP/(TP+FN)锛屽嵆鐪熸g巼
3)F-score锛歅recision鍜孯ecall镄勮皟鍜屽钩鍧囧, 镟存帴杩戜簬P, R涓や釜鏁拌缉灏忕殑闾d釜: F=2* P* R/(P + R)
4)(Aaccuracy): 鍒嗙被鍣ㄥ规暣涓镙锋湰镄勫垽瀹氲兘锷,鍗冲皢姝g殑鍒ゅ畾涓烘o纴璐熺殑鍒ゅ畾涓鸿礋: A = (TP + TN)/(TP + FN + FP + TN)
5)ROC(Receiver Operating Characteristic)锛歊OC镄勪富瑕佸垎鏋愬伐鍏锋槸涓涓鐢诲湪ROC绌洪棿镄勬洸绾库斺搁OC curve锛屾í鍧愭爣涓篺alse positive rate(FPR)锛岀旱鍧愭爣涓篓rue positive rate(TPR)銆
濡备綍鐢籖OC镟茬嚎锛
瀵逛簬浜屽煎垎绫婚梾棰桡纴瀹炰緥镄勫煎线寰鏄杩炵画鍊硷纴阃氲繃璁惧畾涓涓阒埚硷纴灏嗗疄渚嫔垎绫诲埌姝g被鎴栬呰礋绫伙纸姣斿傚ぇ浜庨槇鍊煎垝鍒嗕负姝g被锛夈傚洜姝わ纴鍙浠ュ彉鍖栭槇鍊硷纴镙规嵁涓嶅悓镄勯槇鍊艰繘琛屽垎绫伙纴镙规嵁鍒嗙被缁撴灉璁$畻寰楀埌ROC绌洪棿涓鐩稿簲镄勭偣锛岃繛鎺ヨ繖浜涚偣灏卞舰鎴怰OC curve銆俣OC curve缁忚繃(0,0) (1,1)锛屽疄闄呬笂(0,0)鍜(1,1)杩炵嚎褰㈡垚镄凴OC curve瀹为檯涓娄唬琛ㄧ殑鏄涓涓闅忔満鍒嗙被鍣ㄣ备竴鑸𨱍呭喌涓嬶纴杩欎釜镟茬嚎閮藉簲璇ュ勪簬(0,0)鍜(1,1)杩炵嚎镄勪笂鏂癸纴濡傚浘2镓绀恒
(TPR=0,FPR=0)锛氭妸姣忎釜瀹炰緥閮介勬祴涓鸿礋绫荤殑妯″瀷
(TPR=1,FPR=1)锛氭妸姣忎釜瀹炰緥閮介勬祴涓烘g被镄勬ā鍨
(TPR=1,FPR=0)锛氱悊𨱍虫ā鍨嬶纴鍏ㄩ儴棰勬祴姝g‘
(TPR=0,FPR=1)锛氭渶宸妯″瀷锛屽叏閮ㄩ勬祴阌栾
涓涓濂界殑鍒嗙被妯″瀷搴旇ュ敖鍙鑳介潬杩戝浘褰㈢殑宸︿笂瑙掞纴钥屼竴涓闅忔満鐚沧祴妯″瀷搴斾綅浜庤繛鎺ョ偣(TPR=0,FPR=0)鍜(TPR=1,FPR=1)镄勪富瀵硅掔嚎涓娿
镞㈢劧宸茬粡杩欎箞澶氲瘎浠锋爣鍑嗭纴涓轰粈涔堣缮瑕佷娇鐢≧OC鍜孉UC锻锛
锲犱负ROC镟茬嚎链変釜寰埚ソ镄勭壒镐э细褰撴祴璇曢泦涓镄勬h礋镙锋湰镄勫垎甯冨彉鍖栫殑镞跺欙纴ROC镟茬嚎鑳藉熶缭鎸佷笉鍙樸傚湪瀹为檯镄勬暟鎹闆嗕腑缁忓父浼氩嚭鐜扮被涓嶅钩琛(class imbalance)鐜拌薄锛屽嵆璐熸牱链姣旀f牱链澶氩緢澶(鎴栬呯浉鍙)锛岃屼笖娴嬭瘯鏁版嵁涓镄勬h礋镙锋湰镄勫垎甯冧篃鍙鑳介殢镌镞堕棿鍙桦寲銆
6)AUC(Area Under ROC Curve)
AUC镄勫煎氨鏄澶勪簬ROC curve涓嬫柟镄勯偅閮ㄥ垎闱㈢Н镄勫ぇ灏忋傞氩父锛孉UC镄勫间粙浜0.5鍒1.0涔嬮棿锛岃缉澶х殑AUC浠h〃浜呜缉濂界殑performance銆傚傛灉妯″瀷鏄瀹岀编镄勶纴闾d箞瀹幂殑AUG = 1锛屽傛灉妯″瀷鏄涓绠鍗旷殑闅忔満鐚沧祴妯″瀷锛岄偅涔埚畠镄𪞝UG = 0.5锛屽傛灉涓涓妯″瀷濂戒簬鍙︿竴涓锛屽垯瀹幂殑镟茬嚎涓嬫柟闱㈢Н鐩稿硅缉澶с
⑺ 怎么用算法分类曲线,python
#!/usr/bin/envpython#-*-coding:utf-8-*-########################Info:CurveSimplify#Version1.0#Author:AlexPan#Date:2017-07-11#########################DataTypeuintType=np.uint8
floatType=np.float32##-----------------------------------------------------------------------------------##GetDistanceBetweenpointand[line_start-line_end]LinedefgetPoint2LineDistance(point,line_start,line_end):
#Exception
ifnotisinstance(point,np.ndarray)ornotisinstance(line_start,np.ndarray)ornotisinstance(line_end,np.ndarray):raiseTypeError('AllpointsMUSTbenumpy.ndarray!')elifpoint.ndim!=1orpoint.shape!=line_start.shapeorpoint.shape!=line_end.shape:raiseValueError('!')elif(line_start==line_end).all():raiseException('line_startistheSAMEasline_end!')returnnp.sqrt(np.sum(np.square(point-line_start))-np.square(np.sum((line_end-line_start)*(point-line_start)))/np.sum(np.square(line_end-line_start),dtype=floatType))##-----------------------------------------------------------------------------------##Constrcuctnp.linspaceArraybetweenraw_array[index_start]andraw_array[index_end]defgetLinspaceArray(raw_array,index_start,index_end):
#Exception
ifnotisinstance(raw_array,np.ndarray):raiseTypeError('raw_arrayMUSTbenumpy.ndarray!')elifindex_start<0orindex_end>raw_array.shape[0]orindex_start>index_end:raiseValueError('index_startorindex_endINVALID!')#ReconstructArraybynp.linspaceBasedonkeyIndexes
linspaceArray=np.linspace(raw_array[index_start][0],raw_array[index_end][0],num=index_end-index_start+1,endpoint=True,dtype=floatType)foriinxrange(1,raw_array.shape[1]):
linspaceArray=np.row_stack((linspaceArray,np.linspace(raw_array[index_start][i],raw_array[index_end][i],num=index_end-index_start+1,endpoint=True,dtype=floatType)))returnnp.transpose(linspaceArray)##-----------------------------------------------------------------------------------##(array_A,array_B):
#Exception
ifnotisinstance(array_A,np.ndarray)ornotisinstance(array_B,np.ndarray):raiseTypeError('array_Aandarray_BMUSTbenumpy.ndarray!')elifarray_A.shape!=array_B.shape:raiseValueError('array_Aandarray_BdimensionsNOTmatched!')#Vector
ifarray_A.ndim==array_B.ndim==1:returnnp.sqrt(np.sum(np.square(array_A-array_B)))#Array
error_array=array_A-array_B
error_list=[np.sqrt(np.sum(np.square(error)))forerrorinerror_array]returnfloat(sum(error_list))/len(error_list)##-----------------------------------------------------------------------------------##(poses_array,max_key=10,error_threshold=0.05):
#Exception
ifnotisinstance(poses_array,np.ndarray):raiseTypeError('poses_arrayMUSTbenumpy.ndarray!')#Initialize
N_poses,M_poses=poses_array.shape
keyIndexes=[0,N_poses-1]
reconstructArray=getLinspaceArray(raw_array=poses_array,index_start=keyIndexes[0],index_end=keyIndexes[-1])#Divide
flagContinue=True
whileflagContinue:
keyIndexes.sort()
keyDeltas=[(keyIndexes[i],keyIndexes[i+1])foriinxrange(len(keyIndexes)-1)]forkeyStart,keyEndinkeyDeltas:
distanceList=[getPoint2LineDistance(point=poses_array[i],line_start=poses_array[keyStart],line_end=poses_array[keyEnd])foriinxrange(keyStart+1,keyEnd)]
keyNew=keyStart+distanceList.index(max(distanceList))+1
keyIndexes.append(keyNew)#Reconstruct[keyStart-keyNew]&[keyNew-keyEnd]
reconstructArray[keyStart:keyNew+1]=getLinspaceArray(raw_array=poses_array,index_start=keyStart,index_end=keyNew)
reconstructArray[keyNew:keyEnd+1]=getLinspaceArray(raw_array=poses_array,index_start=keyNew,index_end=keyEnd)
reconstructError=computeReconstructError(poses_array,reconstructArray)#PrintScreen
printcolored('keyNum:','magenta'),len(keyIndexes)print'recError:',colored(str(reconstructError),'white')#ipdb.set_trace()
#EndCondition:KeyNumorReconstructError
iflen(keyIndexes)==max_keyorreconstructError<error_threshold:
flagContinue=False
break
keyIndexes.sort()returnkeyIndexes,reconstructError
⑻ Python分类算法问题
#coding=utf-8
#usingpython27
l1=['a','c','t']
l2=['3412a34214','fgfghc','34242c34534','dsdfgdfcdfgdcccccg']
print[filter(lambdax:iinx,l2)foriinl1]
结果:
[['3412a34214'],['fgfghc','34242c34534','dsdfgdfcdfgdcccccg'],[]]
结果返回一个包含3个一维列表的二维列表, 第一个一维列表为包含‘a’的一类,第二个一维列表为包含‘c’的一类,第三个为包含‘t'的一类