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。

這裡也給出一篇老外寫的文章:調整你的隨機森林模型參數 

這裡我使用了scikit-learn自帶的iris數據來進行隨機森林的預測:

[python] view plain copy

from sklearn.tree import DecisionTreeRegressor

from sklearn.ensemble import RandomForestRegressor

import numpy as np

from sklearn.datasets import load_iris

iris=load_iris()

#print iris#iris的4個屬性是:萼片寬度 萼片長度 花瓣寬度 花瓣長度 標籤是花的種類:setosa versicolour virginica

print iris[‘target’].shape

rf=RandomForestRegressor()#這裡使用了默認的參數設置

rf.fit(iris.data[:150],iris.target[:150])#進行模型的訓練

#

#隨機挑選兩個預測不相同的樣本

instance=iris.data[[100,109]]

print instance

print ‘instance 0 prediction;’,rf.predict(instance[0])

print ‘instance 1 prediction;’,rf.predict(instance[1])

print iris.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演算法包中隨機森林實際上就是一顆顆決策樹組成的。但是之前我寫的決策樹博客中是可以將決策樹給顯示出來。但是隨機森林卻做了黑盒處理。我們不知道內部的決策樹結構,甚至連父節點的選擇特徵都不知道是誰。所以我給出下面的代碼(這代碼不是我的原創),可以顯示的顯示出所有的特徵的貢獻。所以對於貢獻不大的,甚至是負貢獻的我們可以考慮刪除這一列的特徵值,避免做無用的分類。

[python] view plain copy

from sklearn.cross_validation import cross_val_score, ShuffleSplit

X = iris[“data”]

Y = iris[“target”]

names = iris[“feature_names”]

rf = RandomForestRegressor()

scores = []

for i in range(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]))

print sorted(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標準類型的分類?

如果讓我們描述標準類型,我們也許會稱它們是Python的「基本內建數據對象原始類型”。「基本」是指這些類型都是Python提供的標準或核心類型。「內建」是由於這些類型是Python默認就提供的。「數據」是因為他們用於一般數據存儲。「對象」是因為對象是數據和功能的默認抽象。「原始」是因為這些類型提供的是最底層的粒度數據存儲。「類型」是因為他們就是數據類型。不過,上面這些描述實際上並沒有告訴你每個類型如何工作,以及它們能發揮什麼作用。事實上,幾個類型共享某一些的特性,比如功能的實現手段,另一些類型則在訪問數據值方面有一些共同之處。我們感興趣的還有這些類型的數據如何更新,以及它們能提供什麼樣的存儲。有3種不同的模型可以幫助我們對基本類型進行分類,每種模型都展示給我們這些類型之間的相互關係。這些模型可以幫助我們更好的理解類型之間的相互關係以及他們的工作原理。

python對數據進行聚類怎麼顯示數據分類

將其整理成數據集為:

[ [1,0,”yes”],[1,1,”yes”],[0,1,”yes”],[0,0,”no”],[1,0,”no”] ]

演算法過程:

1、計算原始的信息熵。

2、依次計算數據集中每個樣本的每個特徵的信息熵。

3、比較不同特徵信息熵的大小,選出信息熵最大的特徵值並輸出。

運行結果:

col : 0 curInfoGain : 2.37744375108 baseInfoGain : 0.0

col : 1 curInfoGain : 1.37744375108 baseInfoGain : 2.37744375108

bestInfoGain : 2.37744375108 bestFeature: 0

結果分析:

說明按照第一列,即有無喉結這個特徵來進行分類的效果更好。

思考:

1、能否利用決策樹演算法,將樣本最終的分類結果進行輸出?如樣本1,2,3屬於男性,4屬於女性。

2、示常式序生成的決策樹只有一層,當特徵量增多的時候,如何生成具有多層結構的決策樹?

3、如何評判分類結果的好壞?

在下一篇文章中,我將主要對以上三個問題進行分析和解答。如果您也感興趣,歡迎您訂閱我的文章,也可以在下方進行評論,如果有疑問或認為不對的地方,您也可以留言,我將積極與您進行解答。

完整代碼如下:

from math import log

“””

計算信息熵

“””

def calcEntropy(dataset):

diclabel = {} ## 標籤字典,用於記錄每個分類標籤出現的次數

for record in dataset:

label = record[-1]

if label not in diclabel.keys():

diclabel[label] = 0

diclabel[label] += 1

### 計算熵

entropy = 0.0

cnt = len(dataset)

for label in diclabel.keys():

prob = float(1.0 * diclabel[label]/cnt)

entropy -= prob * log(prob,2)

return entropy

def initDataSet():

dataset = [[1,0,”yes”],[1,1,”yes”],[0,1,”yes”],[0,0,”no”],[1,0,”no”]]

label = [“male”,”female”]

return dataset,label

#### 拆分dataset ,根據指定的過濾選項值,去掉指定的列形成一個新的數據集

def splitDataset(dataset , col, value):

retset = [] ## 拆分後的數據集

for record in dataset:

if record[col] == value :

reducedFeatVec = record[:col]

reducedFeatVec.extend(record[col+1:]) ### 將指定的列剔除

retset.append(reducedFeatVec) ### 將新形成的特徵值列表追加到返回的列表中

return retset

### 找出信息熵增益最大的特徵值

### 參數:

### dataset : 原始的數據集

def findBestFeature(dataset):

numFeatures = len(dataset[0]) – 1 ### 特徵值的個數

baseEntropy = calcEntropy(dataset) ### 計算原始數據集的熵

baseInfoGain = 0.0 ### 初始信息增益

bestFeature = -1 ### 初始的最優分類特徵值索引

### 計算每個特徵值的熵

for col in range(numFeatures):

features = [record[col] for record in dataset] ### 提取每一列的特徵向量 如此處col= 0 ,則features = [1,1,0,0]

uniqueFeat = set(features)

curInfoGain = 0 ### 根據每一列進行拆分,所獲得的信息增益

for featVal in uniqueFeat:

subDataset = splitDataset(dataset,col,featVal) ### 根據col列的featVal特徵值來對數據集進行劃分

prob = 1.0 * len(subDataset)/numFeatures ### 計運算元特徵數據集所佔比例

curInfoGain += prob * calcEntropy(subDataset) ### 計算col列的特徵值featVal所產生的信息增益

# print “col : ” ,col , ” featVal : ” , featVal , ” curInfoGain :” ,curInfoGain ,” baseInfoGain : ” ,baseInfoGain

print “col : ” ,col , ” curInfoGain :” ,curInfoGain ,” baseInfoGain : ” ,baseInfoGain

if curInfoGain baseInfoGain:

baseInfoGain = curInfoGain

bestFeature = col

return baseInfoGain,bestFeature ### 輸出最大的信息增益,以獲得該增益的列

dataset,label = initDataSet()

infogain , bestFeature = findBestFeature(dataset)

print “bestInfoGain :” , infogain, ” bestFeature:”,bestFeature

python怎樣把一級分類下面的多級分類都給遍歷出來

廢話不多說。首先要實現這個,具體思路是:

1.給定父文件夾路徑,找出該文件夾中所有的內容(文件夾或文件)。

2.篩選出內容中的文件夾。

總的來說,實現還是挺簡單的,python的os包也提供了許多方法。具體看代碼

[python] view plain copy

# -*- coding: UTF-8 -*-

import os.path

#定義一個函數,path為你的路徑

def traversalDir_FirstDir(path):

#定義一個列表,用來存儲結果

list = []

#判斷路徑是否存在

if (os.path.exists(path)):

#獲取該目錄下的所有文件或文件夾目錄

files = os.listdir(path)

for file in files:

#得到該文件下所有目錄的路徑

m = os.path.join(path,file)

#判斷該路徑下是否是文件夾

if (os.path.isdir(m)):

h = os.path.split(m)

print h[1]

list.append(h[1])

print list

traversalDir_FirstDir(“E:\\xlrd-1.0.0”)

輸出結果為:

[plain] view plain copy

build

dist

scripts

tests

xlrd

xlrd.egg-info

[‘build’, ‘dist’, ‘scripts’, ‘tests’, ‘xlrd’, ‘xlrd.egg-info’]

Python有一個方法是os.path.isdir(pyth),即判斷該路徑下的文件下是否是文件夾,其傳入的參數的參數是路徑,我在想,Python要是提供一個方法,返回該文件下的所有文件路徑就好,但貌似我沒有找到。所以用了os.listdir(pyth),得到了路徑下的所有內容名,然後又用了join()方法把其轉化成路徑~,額,有些麻煩了。其中split()會把路徑截成一個二元組(路徑,文件名)

其實有個方法,os.walk()方法可以得到該文件夾下所有文件夾和文件,但我只要求得到子一級文件夾哈。具體可參考旁邊鏈接:點擊打開鏈接。

下面再附上Python的 os的一些屬性方法:os模塊方法

因之前我學過一些Java,所以感覺Python語法跟Java差不多,不過比Java更加簡練

額,發現一個函數,glob()方法可以直接得到一個文件夾下所有的路徑。上面的代碼可以改進如下:

[python] view plain copy

# -*- coding: UTF-8 -*-

import glob

import os.path

def traversalDir_FirstDir(path):

list = []

if (os.path.exists(path)):

#獲取該目錄下的所有文件或文件夾目錄路徑

files = glob.glob(path + ‘\\*’ )

print files

for file in files:

#判斷該路徑下是否是文件夾

if (os.path.isdir(file)):

#分成路徑和文件的二元元組

h = os.path.split(file)

print h[1]

list.append(h[1])

print list

traversalDir_FirstDir(“E:\\xlrd-1.0.0”)

原創文章,作者:IMCJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134976.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IMCJ的頭像IMCJ
上一篇 2024-10-04 00:09
下一篇 2024-10-04 00:09

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論