質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.20%

使いたいメソッドがなぜか存在しない扱いになってしまっている

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,726
退会済みユーザー

退会済みユーザー

 前提・実現したいこと

numpy.randomでRandomStateメソッドを使いたいです。

 発生している問題・エラーメッセージ

[pylint] E1101:Module 'numpy.random' has no 'RandomState' member

 該当のソースコード

# coding: utf-8


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# *Python Machine Learning 2nd Edition* by [Sebastian Raschka](https://sebastianraschka.com), Packt Publishing Ltd. 2017
# 
# Code Repository: https://github.com/rasbt/python-machine-learning-book-2nd-edition
# 
# Code License: [MIT License](https://github.com/rasbt/python-machine-learning-book-2nd-edition/blob/master/LICENSE.txt)

# # Python Machine Learning - Code Examples

# # Chapter 2 - Training Machine Learning Algorithms for Classification

# Note that the optional watermark extension is a small IPython notebook plugin that I developed to make the code reproducible. You can just skip the following line(s).





# *The use of `watermark` is optional. You can install this IPython extension via "`pip install watermark`". For more information, please see: https://github.com/rasbt/watermark.*

# ### Overview
# 

# - [Artificial neurons – a brief glimpse into the early history of machine learning](#Artificial-neurons-a-brief-glimpse-into-the-early-history-of-machine-learning)
#     - [The formal definition of an artificial neuron](#The-formal-definition-of-an-artificial-neuron)
#     - [The perceptron learning rule](#The-perceptron-learning-rule)
# - [Implementing a perceptron learning algorithm in Python](#Implementing-a-perceptron-learning-algorithm-in-Python)
#     - [An object-oriented perceptron API](#An-object-oriented-perceptron-API)
#     - [Training a perceptron model on the Iris dataset](#Training-a-perceptron-model-on-the-Iris-dataset)
# - [Adaptive linear neurons and the convergence of learning](#Adaptive-linear-neurons-and-the-convergence-of-learning)
#     - [Minimizing cost functions with gradient descent](#Minimizing-cost-functions-with-gradient-descent)
#     - [Implementing an Adaptive Linear Neuron in Python](#Implementing-an-Adaptive-Linear-Neuron-in-Python)
#     - [Improving gradient descent through feature scaling](#Improving-gradient-descent-through-feature-scaling)
#     - [Large scale machine learning and stochastic gradient descent](#Large-scale-machine-learning-and-stochastic-gradient-descent)
# - [Summary](#Summary)






# # Artificial neurons - a brief glimpse into the early history of machine learning





# ## The formal definition of an artificial neuron





# ## The perceptron learning rule










# # Implementing a perceptron learning algorithm in Python

# ## An object-oriented perceptron API





class Perceptron(object):
    """Perceptron classifier.
    Parameters
    ------------
    eta : float
      Learning rate (between 0.0 and 1.0)
    n_iter : int
      Passes over the training dataset.
    random_state : int
      Random number generator seed for random weight
      initialization.
    Attributes
    -----------
    w_ : 1d-array
      Weights after fitting.
    errors_ : list
      Number of misclassifications (updates) in each epoch.
    """
    def __init__(self, eta=0.01, n_iter=50, random_state=1):
        self.eta = eta
        self.n_iter = n_iter
        self.random_state = random_state

    def fit(self, X, y):
        """Fit training data.
        Parameters
        ----------
        X : {array-like}, shape = [n_samples, n_features]
          Training vectors, where n_samples is the number of samples and
          n_features is the number of features.
        y : array-like, shape = [n_samples]
          Target values.
        Returns
        -------
        self : object
        """
        rgen = np.random.RandomState(self.random_state)
        self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1 + X.shape[1])
        self.errors_ = []

 試したこと

色々調べたのですが、原因がわかりませんでした。numpyはインポートしているのに、何故使えないのか見当がつきません。

 補足情報(FW/ツールのバージョンなど)

今現在はパーセプトロンを理解したいための勉強中なので、コードは途中までしか入力していません。従って、問題が解決しても、実際にはこのコードを実行しても特に何も起こりません。(コード全体のURLはhttps://github.com/rasbt/python-machine-learning-book-2nd-edition/blob/master/code/ch02/ch02.py)
開発環境はVisual Studio Codeです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tachikoma

    2018/08/10 22:39

    pylintが見つけられてないだけで、コードは動くんじゃないですかね。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/08/10 22:48

    よく見ればコードは動いているようです。少し調べてみます。

    キャンセル

回答 2

checkベストアンサー

+3

定義場所はここですね。

https://github.com/numpy/numpy/blob/master/numpy/random/mtrand/mtrand.pyx#L593

cdefはcythonのキーワードですね。pip等でインストールしたものはビルと済みのライブラリをコピーするだけなので、mtrandの中に何が入っているか静的解析では知りようがないっすね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/10 23:46

    んー…。調べたんですけど何かよくわかんないです…。本当にざっくりで大丈夫なので、何で静的解析できないか教えてもらえませんか?

    キャンセル

  • 2018/08/11 00:03

    macの環境での話ですが、site-packages/numpy/randomの中にmtrand.cpython-36m-darwin.soという共有ライブラリがあると思います。Windowsだとdllでしょうか。

    これが該当の関数を持ったコンパイル済みのライブラリなのですが、テキストではないので静的解析ツールはこの中身を見ることが出来ません。一方、Python自体は共有ライブラリに入っている関数を読み込む方法を知っています。これが実行できるけど、静的解析が通らない原因です。

    キャンセル

  • 2018/08/11 01:40 編集

    ああそうなのですか。おおよその意味はわかりました。わかりやすく説明してくれてありがとうございました。

    キャンセル

+1

エラーはpylintが出しているようですが、そのまま実行するとどうなりますか?

静的解析で追えていないだけで、実体としてはあるんじゃないかという気がします。

 追記

numpyの実装を見に行ったら、なんかお行儀悪いことしてる・・・
numpy/init.py at master · numpy/numpy · GitHub

これのせいでしょうね。
対策は「無視」でいいです。pylintのエラーが出ても、実害はありません。

 追記2

と思ったけど、間違いかもしれません(追記1に関して)。

tachikomaさんの回答の方が的を射ている気がしますが、未確認なのでとりあえず上に関しては保留します。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/10 22:47 編集

    実行時に調べてみると、エラーは起こりませんでした。なぜ存在しない扱いをしてしまうのか、どうすれば直せるのかはよくわかりませんが、少しpylintについて調べてみます。

    キャンセル

  • 2018/08/10 22:51 編集

    こいつの実体はmtrand.RandomStateで、違うところに書いてあるモジュールをnp.randomの名前空間に突っ込んでるんですね
    __init__.pyに
    from hoge import Fuga, Piyo
    と書いてあったら、静的解析で「そのモジュールにはFugaとPiyoがあるのね」と理解するのは簡単です。おそらくそれは大抵のツールはやってくれると思います。
    今回のケースのように
    from hoge import *
    だと、少なくともpylintは世話してくれないのでしょうね。

    キャンセル

  • 2018/08/10 22:54

    キャンセル

  • 2018/08/10 23:51 編集

    ワイルドカードインポートは知らなかったです。色々見た感じだと確かに名前の混乱とか起きそうであんまりよくなさそうな方法ですねー。ですが、一応こっちの環境で適当なモジュールについてワイルドカードインポートするプログラム書いたら大丈夫だったので、多分別の原因があるのだと思います(素人目ですし、あくまで再現ですが)。ですので、多分もう一方の方の回答が原因だと思われます。色々参考になりました。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る