書籍「Machine Learning in Action」は Python 2 の環境で書かれています。学習プロセスの修正部分を簡単に記録してみましょう
1. print 関数の後に括弧を追加する必要があります (print 関数がプログラム内に表示され始めます)。リスト 2-4)
2. 3.x では、Python は input 関数を使用します (プログラム リスト 2-5)
3. reload(KNN)->importlib
python2.7 では、キーに対応する最初の要素を見つけます: firstStr = myTree.keys()[0]。これは、python3.4 で実行するとエラーを報告します: 'dict_keys' オブジェクトはインデックス作成をサポートしていません。これは python3 が原因ですdict .keys を変更すると、反復可能はサポートしますが、インデックス可能はサポートしない dict_keys オブジェクトが返されます。この場合、この関数は次のように python3 で実装する必要があります:
firstSides = list(myTree.keys()) firstStr = firstSides[0]#找到输入的第一个元素
5。
pickle データを永続化するときは、バイナリ モードで保存および読み取りが行われるため、ファイルに書き込むときは、 fw=open(filename,'w')---->fw=open(filename, 'wb') ピクルの書き込みを容易にするためにバイナリ形式でファイルを開きますファイルからデータを読み取るときは、バイナリ モードでも読み取り、次の変更を行う必要がありますfr=open(filename)-- -->fr= open(filename,'rb') 6. プログラム リスト 4-5 では、wordList=textParse(open('ch04/email/ham/%d.txt' % i ).read() )この文は実行時に必ずコーディングエラーが報告されます。その結果、読み込んだファイルに文字化けがあり、その文字化けを削除すると問題は解決しますエラーコードは次のとおりです:UnicodeDecodeError: ' gbk' コーデックは位置 199 のバイト 0xae をデコードできません: 不正なマルチバイト シーケンス trainingSet=range(50);del(trainingSet[randIndex]) range は List を返すことができず、del 操作をサポートしていないため、実行時エラー: TypeError: 'range' object doesn't support item deletionコードを次のように変更できます: trainingSet = list(range(50)); to be continue...以上がpython3.x の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。